AbstractRuntime 0.15.2__tar.gz → 0.15.3__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 (867) hide show
  1. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/CHANGELOG.md +17 -0
  2. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/PKG-INFO +9 -2
  3. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/README.md +8 -1
  4. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/llms-full.txt +8 -1
  5. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/llms.txt +1 -1
  6. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/pyproject.toml +1 -1
  7. abstractruntime-0.15.3/release-notes.md +14 -0
  8. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/json_files.py +75 -12
  9. abstractruntime-0.15.3/tests/test_json_file_run_store_change_token_after_build.py +131 -0
  10. abstractruntime-0.15.2/release-notes.md +0 -11
  11. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/.github/workflows/ci.yml +0 -0
  12. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/.github/workflows/release.yml +0 -0
  13. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/.gitignore +0 -0
  14. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/ACKNOWLEDGMENTS.md +0 -0
  15. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/CODE_OF_CONDUCT.md +0 -0
  16. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/CONTRIBUTING.md +0 -0
  17. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/LICENSE +0 -0
  18. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/ROADMAP.md +0 -0
  19. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/SECURITY.md +0 -0
  20. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/README.md +0 -0
  21. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  22. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  23. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  24. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  25. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  26. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  27. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
  28. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0008_integration_facades_are_the_complete_host_surface.md +0 -0
  29. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0010_one_replay_many_views.md +0 -0
  30. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0011_memory_facade_is_the_complete_host_surface_for_abstractmemory.md +0 -0
  31. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/README.md +0 -0
  32. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/api.md +0 -0
  33. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/architecture.md +0 -0
  34. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/artifacts.md +0 -0
  35. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/automations.md +0 -0
  36. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/README.md +0 -0
  37. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  38. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  39. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  40. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  41. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
  42. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
  43. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
  44. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
  45. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/003_wait_primitives.md +0 -0
  46. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
  47. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
  48. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
  49. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
  50. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  51. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  52. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  53. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  54. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/009_artifact_store.md +0 -0
  55. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  56. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  57. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  58. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  59. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  60. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  61. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  62. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  63. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  64. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  65. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  66. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  67. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  68. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  69. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  70. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
  71. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
  72. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0851_per_account_voice_stores.md +0 -0
  73. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0852_capability_refusals_are_not_retried.md +0 -0
  74. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0855_prefix_stability_contract_of_consecutive_llm_calls.md +0 -0
  75. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0856_memory_facade_and_ledger_provenance.md +0 -0
  76. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0862_is_empty_accepts_lists.md +0 -0
  77. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0863_index_build_never_loses_a_run_created_during_it.md +0 -0
  78. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  79. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  80. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  81. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  82. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
  83. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  84. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  85. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  86. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/004_tests.md +0 -0
  87. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  88. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  89. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  90. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  91. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/README.md +0 -0
  92. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  93. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
  94. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  95. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  96. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  97. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  98. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
  99. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  100. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
  101. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
  102. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
  103. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
  104. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
  105. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0853_session_tool_policy_before_the_approval_wait.md +0 -0
  106. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0854_replay_view.md +0 -0
  107. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0857_entity_direct_memory_writes_provenance.md +0 -0
  108. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0858_typed_runs_run_type_stamped_at_start.md +0 -0
  109. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0859_replay_view_ephemeral_text_deltas.md +0 -0
  110. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
  111. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
  112. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_portability/README.md +0 -0
  113. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
  114. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
  115. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
  116. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
  117. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
  118. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
  119. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
  120. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
  121. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
  122. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
  123. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
  124. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
  125. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
  126. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
  127. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
  128. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
  129. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  130. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
  131. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
  132. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
  133. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0849_conversation_search_tool_usage_outputs_and_thinking.md +0 -0
  134. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0850_growing_automation_history_out_of_the_controller_ledger.md +0 -0
  135. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0860_replay_view_stop_wording_from_the_ledger.md +0 -0
  136. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0861_replay_view_activity_tool_sandbox_and_call_timings.md +0 -0
  137. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0862_replay_view_message_artifacts_exclude_bookkeeping.md +0 -0
  138. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
  139. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
  140. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
  141. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
  142. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
  143. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
  144. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
  145. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
  146. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
  147. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/email.md +0 -0
  148. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/entity-runtime.md +0 -0
  149. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/evidence.md +0 -0
  150. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/faq.md +0 -0
  151. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/getting-started.md +0 -0
  152. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/integrations/abstractcore.md +0 -0
  153. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/integrations/abstractmemory.md +0 -0
  154. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/limits.md +0 -0
  155. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/manual_testing.md +0 -0
  156. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/mcp-worker.md +0 -0
  157. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/proposal.md +0 -0
  158. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/provenance.md +0 -0
  159. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/replay.md +0 -0
  160. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/snapshots.md +0 -0
  161. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/tool-approval.md +0 -0
  162. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/tools-comms.md +0 -0
  163. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/troubleshooting.md +0 -0
  164. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/workflow-bundles.md +0 -0
  165. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/01_hello_world.py +0 -0
  166. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/02_ask_user.py +0 -0
  167. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/03_wait_until.py +0 -0
  168. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/04_multi_step.py +0 -0
  169. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/05_persistence.py +0 -0
  170. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/06_llm_integration.py +0 -0
  171. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/07_react_agent.py +0 -0
  172. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/README.md +0 -0
  173. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/mkdocs.yml +0 -0
  174. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/pytest.ini +0 -0
  175. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/scripts/backfill_diary_edges.py +0 -0
  176. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/scripts/generate_llms_full.py +0 -0
  177. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/scripts/regen_replay_conformance.py +0 -0
  178. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/__init__.py +0 -0
  179. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automation_queries.py +0 -0
  180. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/__init__.py +0 -0
  181. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/adapters.py +0 -0
  182. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/attention.py +0 -0
  183. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/bundle.py +0 -0
  184. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
  185. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
  186. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/commands.py +0 -0
  187. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/consumers.py +0 -0
  188. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/controller.py +0 -0
  189. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/ledger.py +0 -0
  190. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/models.py +0 -0
  191. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/samples.py +0 -0
  192. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/service.py +0 -0
  193. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/wakes.py +0 -0
  194. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/conversation_search.py +0 -0
  195. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/__init__.py +0 -0
  196. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/config.py +0 -0
  197. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/effect_cancellation.py +0 -0
  198. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/event_keys.py +0 -0
  199. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/health.py +0 -0
  200. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/live_deltas.py +0 -0
  201. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/models.py +0 -0
  202. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/policy.py +0 -0
  203. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/progress_channel.py +0 -0
  204. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/publish.py +0 -0
  205. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/run_attribution.py +0 -0
  206. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/run_identity.py +0 -0
  207. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/run_lifecycle.py +0 -0
  208. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/run_origin.py +0 -0
  209. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/runtime.py +0 -0
  210. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/spec.py +0 -0
  211. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/step_context.py +0 -0
  212. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/tool_scope.py +0 -0
  213. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/vars.py +0 -0
  214. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/documents/__init__.py +0 -0
  215. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/documents/charts.py +0 -0
  216. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/documents/docx.py +0 -0
  217. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/documents/pdf.py +0 -0
  218. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/__init__.py +0 -0
  219. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/actions.py +0 -0
  220. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/automations.py +0 -0
  221. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/binding.py +0 -0
  222. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/feeder.py +0 -0
  223. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/frame.py +0 -0
  224. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/inbox.py +0 -0
  225. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/evidence/__init__.py +0 -0
  226. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/evidence/recorder.py +0 -0
  227. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/history_bundle.py +0 -0
  228. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/__init__.py +0 -0
  229. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/act_only.py +0 -0
  230. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/chat.py +0 -0
  231. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/communities.py +0 -0
  232. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/diary.py +0 -0
  233. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/digest.py +0 -0
  234. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/entity_runtime.py +0 -0
  235. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/fingerprint.py +0 -0
  236. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/lease.py +0 -0
  237. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/life.py +0 -0
  238. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/memory_reader.py +0 -0
  239. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/night_voice.py +0 -0
  240. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/phase_graph.py +0 -0
  241. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/phase_spec.py +0 -0
  242. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/prelude.py +0 -0
  243. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/prompt_overlay.py +0 -0
  244. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/reflection.py +0 -0
  245. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
  246. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/substrate.py +0 -0
  247. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/tool_effects.py +0 -0
  248. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/tool_policy.py +0 -0
  249. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/tools.py +0 -0
  250. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/visit_workflow.py +0 -0
  251. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/__init__.py +0 -0
  252. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  253. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
  254. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
  255. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  256. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
  257. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  258. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
  259. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  260. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
  261. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
  262. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
  263. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
  264. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  265. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
  266. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
  267. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/llm_client.py +0 -0
  268. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
  269. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  270. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
  271. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  272. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
  273. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  274. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
  275. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
  276. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/server_facade.py +0 -0
  277. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  278. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
  279. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  280. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  281. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
  282. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  283. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
  284. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/voice_facade.py +0 -0
  285. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/voice_library.py +0 -0
  286. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  287. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  288. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
  289. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  290. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
  291. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractmemory/memory_facade.py +0 -0
  292. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
  293. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/mail_verbs.py +0 -0
  294. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/__init__.py +0 -0
  295. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/active_context.py +0 -0
  296. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/active_memory.py +0 -0
  297. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/compaction.py +0 -0
  298. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/kg_packets.py +0 -0
  299. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/memact_composer.py +0 -0
  300. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/recall_levels.py +0 -0
  301. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/token_budget.py +0 -0
  302. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/rendering/__init__.py +0 -0
  303. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  304. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/rendering/json_stringify.py +0 -0
  305. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/__init__.py +0 -0
  306. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/__init__.py +0 -0
  307. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/expected_view.json +0 -0
  308. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/manifest.json +0 -0
  309. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/records.json +0 -0
  310. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/runs.json +0 -0
  311. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a_delegated_child_approval/expected_view.json +0 -0
  312. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a_delegated_child_approval/manifest.json +0 -0
  313. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a_delegated_child_approval/records.json +0 -0
  314. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a_delegated_child_approval/runs.json +0 -0
  315. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/b_timer_without_resume/expected_view.json +0 -0
  316. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/b_timer_without_resume/manifest.json +0 -0
  317. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/b_timer_without_resume/records.json +0 -0
  318. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/b_timer_without_resume/runs.json +0 -0
  319. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/expected_view.json +0 -0
  320. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/manifest.json +0 -0
  321. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/records.json +0 -0
  322. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/runs.json +0 -0
  323. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/d_cancellation/expected_view.json +0 -0
  324. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/d_cancellation/manifest.json +0 -0
  325. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/d_cancellation/records.json +0 -0
  326. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/d_cancellation/runs.json +0 -0
  327. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/expected_view.json +0 -0
  328. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/manifest.json +0 -0
  329. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/records.json +0 -0
  330. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/runs.json +0 -0
  331. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e_structured_output_agents/expected_view.json +0 -0
  332. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e_structured_output_agents/manifest.json +0 -0
  333. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e_structured_output_agents/records.json +0 -0
  334. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e_structured_output_agents/runs.json +0 -0
  335. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/f_windowed_slim/expected_view.json +0 -0
  336. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/f_windowed_slim/manifest.json +0 -0
  337. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/f_windowed_slim/records.json +0 -0
  338. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/f_windowed_slim/runs.json +0 -0
  339. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/g_ask_user/expected_view.json +0 -0
  340. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/g_ask_user/manifest.json +0 -0
  341. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/g_ask_user/records.json +0 -0
  342. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/g_ask_user/runs.json +0 -0
  343. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/h_denied_approval/expected_view.json +0 -0
  344. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/h_denied_approval/manifest.json +0 -0
  345. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/h_denied_approval/records.json +0 -0
  346. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/h_denied_approval/runs.json +0 -0
  347. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/i_wait_kinds/expected_view.json +0 -0
  348. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/i_wait_kinds/manifest.json +0 -0
  349. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/i_wait_kinds/records.json +0 -0
  350. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/i_wait_kinds/runs.json +0 -0
  351. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/expected_view.json +0 -0
  352. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/manifest.json +0 -0
  353. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/records.json +0 -0
  354. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/runs.json +0 -0
  355. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/k_nested_delegation/expected_view.json +0 -0
  356. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/k_nested_delegation/manifest.json +0 -0
  357. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/k_nested_delegation/records.json +0 -0
  358. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/k_nested_delegation/runs.json +0 -0
  359. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/l_answer_then_completion/expected_view.json +0 -0
  360. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/l_answer_then_completion/manifest.json +0 -0
  361. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/l_answer_then_completion/records.json +0 -0
  362. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/l_answer_then_completion/runs.json +0 -0
  363. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/m_session_tool_policy/expected_view.json +0 -0
  364. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/m_session_tool_policy/manifest.json +0 -0
  365. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/m_session_tool_policy/records.json +0 -0
  366. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/m_session_tool_policy/runs.json +0 -0
  367. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/delta.py +0 -0
  368. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/executions.py +0 -0
  369. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/view.py +0 -0
  370. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/scheduler/__init__.py +0 -0
  371. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/scheduler/convenience.py +0 -0
  372. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/scheduler/multi_store.py +0 -0
  373. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/scheduler/registry.py +0 -0
  374. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/scheduler/scheduler.py +0 -0
  375. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/session_history.py +0 -0
  376. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/session_turns.py +0 -0
  377. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/__init__.py +0 -0
  378. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/artifacts.py +0 -0
  379. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/base.py +0 -0
  380. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/change_ring.py +0 -0
  381. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/commands.py +0 -0
  382. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/in_memory.py +0 -0
  383. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/lease.py +0 -0
  384. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/ledger_chain.py +0 -0
  385. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/ledger_slim.py +0 -0
  386. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/observable.py +0 -0
  387. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/offloading.py +0 -0
  388. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/serialize.py +0 -0
  389. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/session_tool_policy.py +0 -0
  390. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/snapshots.py +0 -0
  391. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/sqlite.py +0 -0
  392. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/steer_sidecar.py +0 -0
  393. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/__init__.py +0 -0
  394. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/cloudevents.py +0 -0
  395. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/connection_events.py +0 -0
  396. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/connections.py +0 -0
  397. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/email_received.py +0 -0
  398. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/event_frame.py +0 -0
  399. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/feed.py +0 -0
  400. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/manual.py +0 -0
  401. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/protocol.py +0 -0
  402. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/registry.py +0 -0
  403. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/schedule.py +0 -0
  404. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/webhook.py +0 -0
  405. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/turn_grounding.py +0 -0
  406. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/utils/__init__.py +0 -0
  407. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/utils/atomic_files.py +0 -0
  408. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/utils/file_filters.py +0 -0
  409. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/utils/workspace_paths.py +0 -0
  410. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  411. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  412. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  413. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  414. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  415. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
  416. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  417. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  418. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  419. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  420. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  421. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
  422. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  423. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  424. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  425. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  426. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  427. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
  428. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
  429. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
  430. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
  431. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
  432. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  433. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  434. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
  435. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
  436. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  437. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/workflow_bundle/models.py +0 -0
  438. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  439. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  440. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  441. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/README.md +0 -0
  442. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/automation_harness.py +0 -0
  443. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/conftest.py +0 -0
  444. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/email_wp2_support.py +0 -0
  445. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/fixtures/feeds/atom.xml +0 -0
  446. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/fixtures/feeds/rdf-not-a-feed.xml +0 -0
  447. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/fixtures/feeds/rss1-malformed.xml +0 -0
  448. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/fixtures/feeds/rss1.xml +0 -0
  449. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/fixtures/feeds/rss2.xml +0 -0
  450. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/fixtures/schedule_v1_corpus.json +0 -0
  451. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/live_email/conftest.py +0 -0
  452. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/live_email/live_email_support.py +0 -0
  453. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/live_email/test_email_live_runtime.py +0 -0
  454. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/media_endpoint_profile_probe.py +0 -0
  455. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_comms_facade.py +0 -0
  456. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_discovery_facade.py +0 -0
  457. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_host_facade.py +0 -0
  458. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_run_facade.py +0 -0
  459. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_server_facade.py +0 -0
  460. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_structured_facade.py +0 -0
  461. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_telegram_facade.py +0 -0
  462. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_active_consumers_index.py +0 -0
  463. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_active_context_policy.py +0 -0
  464. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_active_index.py +0 -0
  465. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_active_memory.py +0 -0
  466. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_agora_agent_alias_identity.py +0 -0
  467. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_agora_tools_http.py +0 -0
  468. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_analyze_media_addressing_and_walling.py +0 -0
  469. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_answer_user_effect.py +0 -0
  470. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_artifact_session_candidates.py +0 -0
  471. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_artifacts.py +0 -0
  472. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_calendar_schedule.py +0 -0
  473. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_commands.py +0 -0
  474. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_controller.py +0 -0
  475. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_controller_recovery.py +0 -0
  476. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_definition.py +0 -0
  477. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_discussion_isolation.py +0 -0
  478. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_email_results.py +0 -0
  479. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_growing_context.py +0 -0
  480. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_index.py +0 -0
  481. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_list_reads.py +0 -0
  482. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_named_policy_compiler.py +0 -0
  483. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_next_fire.py +0 -0
  484. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_occurrence_input_resolver.py +0 -0
  485. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_occurrence_recovery.py +0 -0
  486. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_replay_read_only.py +0 -0
  487. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_retry.py +0 -0
  488. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_session_turns.py +0 -0
  489. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_status.py +0 -0
  490. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_tool_approval.py +0 -0
  491. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_browser_probe_target_walling.py +0 -0
  492. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_budget_law_no_unrequested_caps.py +0 -0
  493. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_capability_default_reasoning.py +0 -0
  494. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_chat_summarizer_integration.py +0 -0
  495. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_code_node_imports.py +0 -0
  496. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_code_node_restricted_python.py +0 -0
  497. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_command_sandbox_host_facade.py +0 -0
  498. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_command_store.py +0 -0
  499. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_compaction_helpers.py +0 -0
  500. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_compaction_summarizer_route.py +0 -0
  501. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_config_facade_models_engines.py +0 -0
  502. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_config_facade_voice_input_hint.py +0 -0
  503. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_control_adapter_while.py +0 -0
  504. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_controller_bundle_packaged.py +0 -0
  505. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_conversation_search.py +0 -0
  506. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_crash_ordering_inversions.py +0 -0
  507. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_create_if_absent.py +0 -0
  508. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_data_registry_facade.py +0 -0
  509. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_model_warmup_switch.py +0 -0
  510. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_tools_camera_gating.py +0 -0
  511. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_tools_comms_gating.py +0 -0
  512. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_tools_include_skim_files.py +0 -0
  513. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_tools_include_skim_folders.py +0 -0
  514. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_tools_include_skim_web.py +0 -0
  515. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_tools_search_files_executor.py +0 -0
  516. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_diary_capture.py +0 -0
  517. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_diary_write_rescue.py +0 -0
  518. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_directory_lease.py +0 -0
  519. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_disabled_toolsets_seam.py +0 -0
  520. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_discovery_survives_unbuildable_default.py +0 -0
  521. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_discovery_tts_unavailable_reason.py +0 -0
  522. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_discovery_voice_openai_api_key.py +0 -0
  523. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_discussion_session_anchor.py +0 -0
  524. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_document_markdown_tables.py +0 -0
  525. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_document_renderers_hr_quote.py +0 -0
  526. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_durable_toolsets.py +0 -0
  527. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_durable_write_discipline.py +0 -0
  528. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  529. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_effect_cancellation.py +0 -0
  530. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_effect_issuance_idempotency.py +0 -0
  531. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_effect_payload_stays_json_serializable.py +0 -0
  532. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_election_consequence_teaching.py +0 -0
  533. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_binding_and_refiner.py +0 -0
  534. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_feeder_batched.py +0 -0
  535. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_feeder_flags.py +0 -0
  536. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_gate_fixes.py +0 -0
  537. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_inbox_and_trigger.py +0 -0
  538. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_received_mailbox_id.py +0 -0
  539. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_regate_fixes.py +0 -0
  540. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_review_fixes.py +0 -0
  541. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_self_trigger_loop.py +0 -0
  542. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_stream_consumers.py +0 -0
  543. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_toolset_and_walls.py +0 -0
  544. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_emergence_experiment.py +0 -0
  545. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_emit_event_uses_wait_index.py +0 -0
  546. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_emit_event_without_workflow_registry.py +0 -0
  547. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_endpoint_profile_media_end_to_end.py +0 -0
  548. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_endpoint_profile_media_in_process.py +0 -0
  549. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_endpoint_profile_media_specs_keep_provider.py +0 -0
  550. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_endpoint_profile_route_context.py +0 -0
  551. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_awake_memory_fixes.py +0 -0
  552. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_brain_effects.py +0 -0
  553. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_chat_driver.py +0 -0
  554. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_chat_tools_reflection.py +0 -0
  555. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_diary.py +0 -0
  556. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_execute_tool.py +0 -0
  557. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_fetch_url_tool.py +0 -0
  558. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_history_window.py +0 -0
  559. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_life_loop.py +0 -0
  560. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_memory_richness.py +0 -0
  561. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_phase_graph_conformance.py +0 -0
  562. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_react_visit_window.py +0 -0
  563. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_recent_memories.py +0 -0
  564. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_runtime.py +0 -0
  565. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_search_memory.py +0 -0
  566. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
  567. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_substrate_resolution.py +0 -0
  568. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_visit_honesty.py +0 -0
  569. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_workspace_cap.py +0 -0
  570. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_workspace_tools.py +0 -0
  571. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_event_index_cross_process.py +0 -0
  572. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_event_wait_index.py +0 -0
  573. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
  574. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_evidence_recorder.py +0 -0
  575. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
  576. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_execute_command_output_offload.py +0 -0
  577. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_execution_capability_discovery.py +0 -0
  578. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_explicit_eject_other_clients.py +0 -0
  579. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_factory_default_retry_policy.py +0 -0
  580. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  581. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_format_repair_nudge.py +0 -0
  582. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_fresh_install_no_provider.py +0 -0
  583. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_gateway_facades_c4899.py +0 -0
  584. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_git_read_only_refiner.py +0 -0
  585. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_hf_process_residency_merge.py +0 -0
  586. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_history_window_multimodal.py +0 -0
  587. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_hot_path_store_reads.py +0 -0
  588. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_indexed_idempotency_lookup.py +0 -0
  589. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_integration_abstractcore.py +0 -0
  590. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_integrations_abstractcore.py +0 -0
  591. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_json_file_run_store_children_index.py +0 -0
  592. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_json_file_run_store_index_build_race.py +0 -0
  593. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_json_run_cache_bound.py +0 -0
  594. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_json_store_scan_memo.py +0 -0
  595. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_jsonl_ledger_recovery.py +0 -0
  596. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_jsonl_ledger_seq_cross_process.py +0 -0
  597. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_jsonl_row_index.py +0 -0
  598. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_kg_learn_and_recall_contract.py +0 -0
  599. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_ledger_chain.py +0 -0
  600. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_ledger_cursor_invariants.py +0 -0
  601. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_ledger_get_record.py +0 -0
  602. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_ledger_record_slimming.py +0 -0
  603. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_ledger_subscription.py +0 -0
  604. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_live_token_deltas.py +0 -0
  605. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_media_artifact_refs.py +0 -0
  606. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  607. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  608. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_payload_shape_refusal.py +0 -0
  609. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_prefix_stability_contract.py +0 -0
  610. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_requires_prompt.py +0 -0
  611. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_response_schema_normalization.py +0 -0
  612. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_structured_output_fallback.py +0 -0
  613. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_text_phase_progress.py +0 -0
  614. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  615. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  616. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  617. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_client_grounding_tail.py +0 -0
  618. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_client_media_artifacts.py +0 -0
  619. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_client_system_context.py +0 -0
  620. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_client_tool_call_parsing.py +0 -0
  621. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_retry_classification.py +0 -0
  622. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_streaming_on_token.py +0 -0
  623. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_local_helper_tool_exposure.py +0 -0
  624. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_local_residency_host_sweep.py +0 -0
  625. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  626. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mail_verbs.py +0 -0
  627. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mailbox_index.py +0 -0
  628. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_max_iterations_ceiling.py +0 -0
  629. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mcp_remote_tool_executor.py +0 -0
  630. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
  631. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mcp_worker_logging.py +0 -0
  632. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mcp_worker_security.py +0 -0
  633. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mcp_worker_stdio.py +0 -0
  634. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_media_artifact_resolution.py +0 -0
  635. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_media_capability_default_routing.py +0 -0
  636. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_media_host_endpoint_resolver.py +0 -0
  637. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_media_only_requests_skip_text_client.py +0 -0
  638. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_media_subprocess.py +0 -0
  639. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memact_composer_from_kg_result.py +0 -0
  640. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_appraise_handler.py +0 -0
  641. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_communities.py +0 -0
  642. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_facade.py +0 -0
  643. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  644. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_kg_packets.py +0 -0
  645. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  646. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  647. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  648. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  649. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_note_effect.py +0 -0
  650. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_query_effect.py +0 -0
  651. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_query_rich_filters.py +0 -0
  652. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_revise.py +0 -0
  653. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  654. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_seam_handlers.py +0 -0
  655. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_seam_sqlite_durability.py +0 -0
  656. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_step_provenance.py +0 -0
  657. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_tag_effect.py +0 -0
  658. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mlx_generation_serialization.py +0 -0
  659. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mlx_process_residency_merge.py +0 -0
  660. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_model_eject_cancel.py +0 -0
  661. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_model_residency_clean_switch.py +0 -0
  662. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_model_residency_control_plane.py +0 -0
  663. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
  664. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_multi_store_scheduler.py +0 -0
  665. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_multimodal_abstractcore_integration.py +0 -0
  666. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_native_mlx_application_wiring.py +0 -0
  667. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_native_mlx_execution_controls_live.py +0 -0
  668. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_native_tool_channel.py +0 -0
  669. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_night_voice.py +0 -0
  670. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_no_default_provider_refusal_ux.py +0 -0
  671. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_occurrence_named_inputs.py +0 -0
  672. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_occurrence_samples.py +0 -0
  673. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_offload_answer_chain_c4978.py +0 -0
  674. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
  675. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_offloading.py +0 -0
  676. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_packaging_extras.py +0 -0
  677. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_parallel_readonly_tool_execution.py +0 -0
  678. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_pause_resume.py +0 -0
  679. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_pdf_unicode_rendering.py +0 -0
  680. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_personal_cycle.py +0 -0
  681. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_phantom_attachment_index.py +0 -0
  682. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_phase_graph_artifact_control.py +0 -0
  683. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_phase_graph_obedience.py +0 -0
  684. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_phase_vocabulary_migration.py +0 -0
  685. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
  686. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_prompt_cache_export_import.py +0 -0
  687. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
  688. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_prompt_cache_modules.py +0 -0
  689. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_prompt_cache_posture_inheritance.py +0 -0
  690. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
  691. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_prompt_overlay.py +0 -0
  692. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_provider_endpoint_profile_resolution.py +0 -0
  693. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_provider_pin_routing_isolation.py +0 -0
  694. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_publish_event.py +0 -0
  695. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_queryable_run_store.py +0 -0
  696. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_r12_workspace_sandbox.py +0 -0
  697. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  698. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_read_idle_threading.py +0 -0
  699. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_readoption_experiment.py +0 -0
  700. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_real_integration.py +0 -0
  701. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_realize_election.py +0 -0
  702. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_recall_levels_policy.py +0 -0
  703. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_remote_client_cancel.py +0 -0
  704. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_remote_llm_client.py +0 -0
  705. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_remote_speculation_defaults.py +0 -0
  706. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_rendering_agent_trace_report.py +0 -0
  707. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_rendering_json_stringify.py +0 -0
  708. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_conformance.py +0 -0
  709. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_conformance_package.py +0 -0
  710. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_cursor_token.py +0 -0
  711. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_delta_cost.py +0 -0
  712. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_invariants.py +0 -0
  713. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_review_findings.py +0 -0
  714. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_tool_policy.py +0 -0
  715. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_report_branding.py +0 -0
  716. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_resident_media_generation.py +0 -0
  717. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_resume_concurrent_same_wait.py +0 -0
  718. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_retry_idempotency.py +0 -0
  719. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_history_bundle.py +0 -0
  720. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_index_workspace_root.py +0 -0
  721. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_mutation_lock.py +0 -0
  722. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_origin.py +0 -0
  723. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_scoped_tool_policy.py +0 -0
  724. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_store_change_token.py +0 -0
  725. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_tool_scope_ceiling.py +0 -0
  726. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_browser_session_boundary.py +0 -0
  727. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  728. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_default_provider_model_refresh.py +0 -0
  729. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_effect_invocation_trace.py +0 -0
  730. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_health_and_bounded_vars.py +0 -0
  731. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_install_boundary.py +0 -0
  732. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  733. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_node_traces.py +0 -0
  734. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  735. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_tick_step_gate.py +0 -0
  736. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_schedule_run.py +0 -0
  737. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_schedule_v1_corpus.py +0 -0
  738. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_schedule_v2_calendar.py +0 -0
  739. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_scheduler.py +0 -0
  740. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_send_email_refiner.py +0 -0
  741. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_send_email_self_default_policy.py +0 -0
  742. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  743. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_history.py +0 -0
  744. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_prompt_cache_attribution.py +0 -0
  745. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_prompt_cache_visibility.py +0 -0
  746. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_route_stamp.py +0 -0
  747. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_start_cost.py +0 -0
  748. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_tool_policy.py +0 -0
  749. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_shell_tool_exposure.py +0 -0
  750. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_snapshots.py +0 -0
  751. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_speculation_inheritance.py +0 -0
  752. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_speculation_reaches_provider_construction.py +0 -0
  753. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_sqlite_ledger_store.py +0 -0
  754. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_start_subworkflow_async_wait.py +0 -0
  755. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  756. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  757. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_steer_sidecar.py +0 -0
  758. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_step_context.py +0 -0
  759. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_storage_deletion.py +0 -0
  760. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_streamed_voice_namespace.py +0 -0
  761. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_structured_output_schema_enum.py +0 -0
  762. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_subworkflow.py +0 -0
  763. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_terminal_effect_completion.py +0 -0
  764. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  765. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_thinking_inheritance.py +0 -0
  766. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  767. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_approval_executor.py +0 -0
  768. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_approval_resume_executes.py +0 -0
  769. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_approval_wait_key_identity.py +0 -0
  770. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_calls_idempotency_keys.py +0 -0
  771. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_catalog.py +0 -0
  772. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_descriptor_registry.py +0 -0
  773. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_executor_argument_sanitization.py +0 -0
  774. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_executor_error_output_detection.py +0 -0
  775. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_executor_filename_alias.py +0 -0
  776. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  777. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_executor_read_file_aliases.py +0 -0
  778. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_executor_timeout.py +0 -0
  779. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_inventory_facade.py +0 -0
  780. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_invoke_effect.py +0 -0
  781. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_policy_and_mounts.py +0 -0
  782. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_wait_allowlist_safety.py +0 -0
  783. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_topic_election_world_model.py +0 -0
  784. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trace_context_propagation.py +0 -0
  785. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_cloudevents.py +0 -0
  786. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_connection_listening.py +0 -0
  787. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_connections.py +0 -0
  788. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_feed.py +0 -0
  789. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_registry.py +0 -0
  790. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_schedule_math.py +0 -0
  791. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_webhook.py +0 -0
  792. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trusted_run_index.py +0 -0
  793. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_turn_grounding_byte_stability.py +0 -0
  794. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_turn_grounding_carriers_a3.py +0 -0
  795. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_vars_query_effect.py +0 -0
  796. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visit_ab_fixture.py +0 -0
  797. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visit_midturn_elections.py +0 -0
  798. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visit_midturn_resume.py +0 -0
  799. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visit_workflow.py +0 -0
  800. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  801. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
  802. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  803. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  804. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  805. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  806. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_entity_memory_nodes.py +0 -0
  807. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
  808. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_llm_call_partial_override.py +0 -0
  809. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  810. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_loop_back_out_of_body.py +0 -0
  811. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
  812. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_loop_limit_on_wire.py +0 -0
  813. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_memact_compose_node.py +0 -0
  814. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  815. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  816. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  817. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_reroute_lowering.py +0 -0
  818. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_set_vars_pins.py +0 -0
  819. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_unknown_node_type_refuses.py +0 -0
  820. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
  821. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_add_message_builtin.py +0 -0
  822. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  823. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_agora_react_agent.py +0 -0
  824. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_call_tool_node.py +0 -0
  825. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
  826. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_compiler_basic.py +0 -0
  827. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  828. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_continue_on_error.py +0 -0
  829. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_edit_json_schema_node.py +0 -0
  830. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
  831. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_file_nodes_workspace.py +0 -0
  832. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_function_library.py +0 -0
  833. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_get_element_node.py +0 -0
  834. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_get_random_element_node.py +0 -0
  835. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_get_var_node.py +0 -0
  836. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_has_tools_builtin.py +0 -0
  837. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  838. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  839. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_make_object_node.py +0 -0
  840. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_media_nodes.py +0 -0
  841. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  842. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_memory_source_pins.py +0 -0
  843. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_pin_expressions.py +0 -0
  844. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_prompt_only.py +0 -0
  845. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_random_nodes.py +0 -0
  846. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_schema_enum_switch.py +0 -0
  847. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_string_contains_replace.py +0 -0
  848. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_tool_parameters_node.py +0 -0
  849. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_voice_library_facade.py +0 -0
  850. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_voice_openai_api_key_path.py +0 -0
  851. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_voice_stream_is_not_a_wait.py +0 -0
  852. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_w4_feelings_lens.py +0 -0
  853. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_wait_event_deadline.py +0 -0
  854. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_wait_event_prompt_metadata.py +0 -0
  855. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_wait_until_streak.py +0 -0
  856. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_wait_until_utc_normalization.py +0 -0
  857. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workflow_bundle_registry.py +0 -0
  858. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_builtin_deny.py +0 -0
  859. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_context_allowed_workspaces.py +0 -0
  860. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
  861. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  862. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  863. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
  864. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_prompt_context.py +0 -0
  865. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_read_only.py +0 -0
  866. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_writable_paths.py +0 -0
  867. {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_write_chart.py +0 -0
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.15.3] - 2026-10-29
11
+
12
+ ### Fixed
13
+
14
+ - **An index build no longer announces its journal replay as changes** (`JsonFileRunStore`; a 0.15.2 regression).
15
+ 0.15.2's first sync after a build re-applies the journal tail before the build's mark (backlog 0863) and noted every
16
+ replayed record on the change ring: a plain read (`list_run_index`, `warm_session_index`) moved `change_token` and
17
+ `changed_run_ids` then named every run in the tail as changed, so a change-driven consumer re-read every run after
18
+ each build (the gateway's mail notification check loaded all 400 finished runs of its index test on every full
19
+ pass: AbstractGateway backlog 0965, red CI since 0.15.2). Replayed records are still filed into the session,
20
+ children and active indexes (the 0863 guarantee stands). A replay is quiet only when it says nothing new: its file
21
+ was known to the store at the build's mark (the scan memo, the sidecar included) and is unchanged since; a file
22
+ that landed or changed during the build (the record precedes the file, J53-1), a known run now gone, and every
23
+ record after the mark are announced as before, so a consumer whose token already covers the record still learns
24
+ of it; a store with no sidecar announces its first replay (a bounded one-off). Tests:
25
+ `tests/test_json_file_run_store_change_token_after_build.py` (red on 0.15.2).
26
+
10
27
  ## [0.15.2] - 2026-10-28
11
28
 
12
29
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: AbstractRuntime
3
- Version: 0.15.2
3
+ Version: 0.15.3
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
@@ -55,10 +55,17 @@ Description-Content-Type: text/markdown
55
55
 
56
56
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
57
57
 
58
- **Version:** 0.15.2 • **Python:** 3.10+
58
+ **Version:** 0.15.3 • **Python:** 3.10+
59
59
 
60
60
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
61
61
 
62
+ ## What's new in 0.15.3
63
+
64
+ - **A run-store index build no longer announces its journal replay as changes**: a plain read (`list_run_index`,
65
+ `warm_session_index`) leaves `change_token` and `changed_run_ids` untouched, so a change-driven consumer (the
66
+ gateway's mail notification check) no longer re-reads every finished run after each build (a 0.15.2 regression;
67
+ AbstractGateway backlog 0965). A file that landed during the build and a known run that vanished are still announced.
68
+
62
69
  ## What's new in 0.15.2
63
70
 
64
71
  - **Run index builds never lose a run created during them**: a run another process (or store object) wrote while
@@ -4,10 +4,17 @@
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.15.2 • **Python:** 3.10+
7
+ **Version:** 0.15.3 • **Python:** 3.10+
8
8
 
9
9
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
10
10
 
11
+ ## What's new in 0.15.3
12
+
13
+ - **A run-store index build no longer announces its journal replay as changes**: a plain read (`list_run_index`,
14
+ `warm_session_index`) leaves `change_token` and `changed_run_ids` untouched, so a change-driven consumer (the
15
+ gateway's mail notification check) no longer re-reads every finished run after each build (a 0.15.2 regression;
16
+ AbstractGateway backlog 0965). A file that landed during the build and a known run that vanished are still announced.
17
+
11
18
  ## What's new in 0.15.2
12
19
 
13
20
  - **Run index builds never lose a run created during them**: a run another process (or store object) wrote while
@@ -55,10 +55,17 @@ See llms.txt for the linked index.
55
55
 
56
56
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
57
57
 
58
- **Version:** 0.15.2 • **Python:** 3.10+
58
+ **Version:** 0.15.3 • **Python:** 3.10+
59
59
 
60
60
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
61
61
 
62
+ ## What's new in 0.15.3
63
+
64
+ - **A run-store index build no longer announces its journal replay as changes**: a plain read (`list_run_index`,
65
+ `warm_session_index`) leaves `change_token` and `changed_run_ids` untouched, so a change-driven consumer (the
66
+ gateway's mail notification check) no longer re-reads every finished run after each build (a 0.15.2 regression;
67
+ AbstractGateway backlog 0965). A file that landed during the build and a known run that vanished are still announced.
68
+
62
69
  ## What's new in 0.15.2
63
70
 
64
71
  - **Run index builds never lose a run created during them**: a run another process (or store object) wrote while
@@ -3,7 +3,7 @@
3
3
  > Durable workflow runtime (interrupt → checkpoint → resume) with an append-only execution ledger.
4
4
 
5
5
  - Python: 3.10+ (see `pyproject.toml`)
6
- - Version: 0.15.2
6
+ - Version: 0.15.3
7
7
  - Ecosystem: [AbstractFramework](https://github.com/lpalbou/AbstractFramework) umbrella, integrates with [AbstractCore](https://github.com/lpalbou/abstractcore)
8
8
  - Hard invariant: `RunState.vars` must be JSON-serializable (`src/abstractruntime/core/models.py`)
9
9
  - Current AbstractCore baseline: base `abstractruntime` requires AbstractCore 2.30.0 or newer with its light install (remote providers, tools and the MCP worker, media routing); `abstractruntime[apple]` and `abstractruntime[gpu]` require AbstractCore's `apple` and `gpu` settings (`pyproject.toml`)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "AbstractRuntime"
7
- version = "0.15.2"
7
+ version = "0.15.3"
8
8
  description = "AbstractRuntime: a durable graph runner designed to pair with AbstractCore."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -0,0 +1,14 @@
1
+ ### Fixed
2
+
3
+ - **An index build no longer announces its journal replay as changes** (`JsonFileRunStore`; a 0.15.2 regression).
4
+ 0.15.2's first sync after a build re-applies the journal tail before the build's mark (backlog 0863) and noted every
5
+ replayed record on the change ring: a plain read (`list_run_index`, `warm_session_index`) moved `change_token` and
6
+ `changed_run_ids` then named every run in the tail as changed, so a change-driven consumer re-read every run after
7
+ each build (the gateway's mail notification check loaded all 400 finished runs of its index test on every full
8
+ pass: AbstractGateway backlog 0965, red CI since 0.15.2). Replayed records are still filed into the session,
9
+ children and active indexes (the 0863 guarantee stands). A replay is quiet only when it says nothing new: its file
10
+ was known to the store at the build's mark (the scan memo, the sidecar included) and is unchanged since; a file
11
+ that landed or changed during the build (the record precedes the file, J53-1), a known run now gone, and every
12
+ record after the mark are announced as before, so a consumer whose token already covers the record still learns
13
+ of it; a store with no sidecar announces its first replay (a bounded one-off). Tests:
14
+ `tests/test_json_file_run_store_change_token_after_build.py` (red on 0.15.2).
@@ -188,6 +188,16 @@ class JsonFileRunStore(RunStore):
188
188
  self._journal_path = self._base / ".runs_created.log"
189
189
  self._journal_lock = threading.Lock()
190
190
  self._journal_offset: Optional[int] = None
191
+ # The journal's size when an index build marked it (`_mark_journal_start`): records
192
+ # before it are REPLAYED by the first sync (filed into the indexes, nothing announced:
193
+ # they predate the build's scan, which already read their files, or are this store's own
194
+ # saves, announced when they happened). Only records after it are changes.
195
+ self._journal_replay_mark: int = 0
196
+ # What this store knew when it marked: {run id: file identity token} from the scan memo
197
+ # (the sidecar included). A replayed record is quiet only for a file known then and
198
+ # unchanged since; anything else (a file that landed or changed during the build, a known
199
+ # run now gone) is announced like any change.
200
+ self._journal_replay_known: Dict[str, tuple] = {}
191
201
  from collections import deque as _deque
192
202
 
193
203
  self._journal_own_appends: Any = _deque(maxlen=8192)
@@ -747,10 +757,17 @@ class JsonFileRunStore(RunStore):
747
757
  """Called BEFORE an index's full scan: entries appended from here on
748
758
  are re-applied by `_sync_indexes` (idempotent), so nothing created
749
759
  during the scan is lost."""
760
+ if self._journal_offset is not None:
761
+ return
762
+ self._load_scan_sidecar_once() # the memo as a restarted store knows it, before the snapshot
763
+ with self._scan_memo_lock:
764
+ known = {rid: tuple(v[0]) for rid, v in self._scan_memo.items()}
750
765
  with self._journal_lock:
751
766
  if self._journal_offset is None:
752
767
  size = self._journal_size()
753
768
  self._journal_offset = self._journal_replay_start(size) if size is not None else 0
769
+ self._journal_replay_mark = int(size) if size is not None else 0
770
+ self._journal_replay_known = known
754
771
 
755
772
  def _journal_replay_start(self, size: int) -> int:
756
773
  """Where the first sync after an index build starts reading: the first record boundary
@@ -824,24 +841,57 @@ class JsonFileRunStore(RunStore):
824
841
  return
825
842
  complete = chunk.rfind(b"\n") + 1 # a line still being written waits for the next sync
826
843
  self._journal_offset = offset + complete
844
+ mark = self._journal_replay_mark
827
845
  pending = dict(self._journal_pending)
828
846
  entries = list(pending.items())
829
847
  now = time.time()
830
- for raw in chunk[:complete].decode("utf-8", "replace").splitlines():
848
+ # A record wholly before the build's mark is a replay (0.15.2): it is filed, never
849
+ # announced as a change (`change_token` / `changed_run_ids` stay put: a read that moved
850
+ # them made every change-driven consumer re-read every run after each build, 0.15.3).
851
+ replayed: set = set()
852
+ announced: set = set()
853
+ pos = offset
854
+ for raw_line in chunk[:complete].split(b"\n"):
855
+ line_end = pos + len(raw_line) + 1
856
+ raw = raw_line.decode("utf-8", "replace")
831
857
  op, rid = raw[:1], raw[1:].strip()
832
858
  if op in ("+", "-", "~", "=") and rid:
833
859
  entries.append((rid, (op, now)))
834
- self._apply_journal_entries(entries)
835
-
836
- def _apply_journal_entries(self, entries: Any) -> None:
860
+ (replayed if line_end <= mark else announced).add(rid)
861
+ pos = line_end
862
+ self._apply_journal_entries(entries, quiet=replayed - announced)
863
+ if offset + complete >= mark:
864
+ self._journal_replay_known = {} # the replay is over: later records are all new
865
+
866
+ def _apply_journal_entries(self, entries: Any, *, quiet: Any = frozenset()) -> None:
867
+ """`quiet`: run ids whose records are replays (an index build's tail). A replay is filed
868
+ without a change-ring note only when it says nothing new: its file was known at the mark
869
+ (`_journal_replay_known`) and is unchanged since; a known run now gone IS announced. A file
870
+ that landed or changed during the build (J53-1: the record precedes the file) is announced
871
+ like any change, so a consumer whose token already covers the record still learns of it."""
837
872
  cutoff = time.time() - float(self.STALE_TEMP_AGE_S)
838
873
  for rid, (op, since) in entries:
874
+ note = rid not in quiet
839
875
  p = self._path(rid)
840
876
  exists = p.exists()
877
+ if not note:
878
+ known = self._journal_replay_known.get(rid)
879
+ if exists:
880
+ try:
881
+ unchanged = known is not None and tuple(known) == tuple(self._stat_token(p.stat()))
882
+ except OSError:
883
+ unchanged = False
884
+ note = not unchanged
885
+ else:
886
+ with self._scan_memo_lock:
887
+ in_memo = rid in self._scan_memo
888
+ with self._active_lock:
889
+ in_active = rid in self._active
890
+ note = known is not None or in_memo or in_active
841
891
  if op in ("+", "~", "=") and exists:
842
892
  fields = self._scan_fields(p)
843
893
  if fields is not None:
844
- self._index_fields_into_indexes(rid, fields)
894
+ self._index_fields_into_indexes(rid, fields, note=note)
845
895
  # `~` announces a flip TO active: until the file says so it is
846
896
  # not resolved (the writer's replace may land after its line).
847
897
  # `=` is written AFTER its file was published: one read resolves it.
@@ -849,7 +899,7 @@ class JsonFileRunStore(RunStore):
849
899
  elif op == "-" and not exists:
850
900
  self._drop_from_children_index(rid)
851
901
  self._drop_from_session_index(rid)
852
- self._forget_active(rid)
902
+ self._forget_active(rid, note=note)
853
903
  self._memo_pop(rid)
854
904
  resolved = True
855
905
  elif op == "=":
@@ -862,7 +912,7 @@ class JsonFileRunStore(RunStore):
862
912
  else:
863
913
  self._journal_pending[rid] = (op, since)
864
914
 
865
- def _index_fields_into_indexes(self, rid: str, fields: Dict[str, Any]) -> None:
915
+ def _index_fields_into_indexes(self, rid: str, fields: Dict[str, Any], *, note: bool = True) -> None:
866
916
  parent = fields.get("parent_run_id")
867
917
  parent = str(parent) if parent else None
868
918
  with self._index_lock:
@@ -875,7 +925,7 @@ class JsonFileRunStore(RunStore):
875
925
  if self._session_index is not None and sid:
876
926
  self._session_index.setdefault(sid, {})[rid] = fields.get("session_kind")
877
927
  self._run_session[rid] = sid
878
- self._note_active_status(rid, fields.get("status"))
928
+ self._note_active_status(rid, fields.get("status"), note=note)
879
929
 
880
930
  def warm_session_index(self) -> None:
881
931
  """Build the session and children indexes now (host boot), so the
@@ -1267,24 +1317,37 @@ class JsonFileRunStore(RunStore):
1267
1317
  e = self._active[rid] = _ActiveEntry()
1268
1318
  return e
1269
1319
 
1270
- def _note_active_status(self, rid: str, status: Any) -> None:
1320
+ def _note_active_status(self, rid: str, status: Any, *, note: bool = True) -> None:
1271
1321
  """Record what a save, a journal line or a verified read says about a
1272
1322
  run. Always recorded (before the first build too): a scan in progress
1273
1323
  merges by generation, a build not yet started reads disk truth and
1274
- reconciles these notes with it."""
1324
+ reconciles these notes with it.
1325
+
1326
+ `note=False` (a replayed journal record, `_apply_journal_entries`): the
1327
+ membership is kept right, but nothing is announced: no sequence bump,
1328
+ no change-ring entry, so `change_token` does not move for a read."""
1275
1329
  if not rid:
1276
1330
  return
1277
1331
  with self._active_lock:
1332
+ existed = rid in self._active
1278
1333
  e = self._active_entry(rid)
1334
+ active = self._is_active_status(status)
1335
+ if not note and (not existed or e.active == active):
1336
+ # A replay of a file known at the mark and unchanged since: filed, not announced
1337
+ # (an existing entry whose active flag FLIPS is a change, announced below).
1338
+ e.active = active
1339
+ return
1340
+ e.active = active
1279
1341
  self._active_seq += 1
1280
1342
  e.gen = self._active_seq
1281
- e.active = self._is_active_status(status)
1282
1343
  self._change_ring.note(self._active_seq, rid)
1283
1344
 
1284
- def _forget_active(self, rid: str) -> None:
1345
+ def _forget_active(self, rid: str, *, note: bool = True) -> None:
1285
1346
  """The run is gone (deleted here, or a `-id` line): drop its record."""
1286
1347
  with self._active_lock:
1287
1348
  self._active.pop(rid, None)
1349
+ if not note:
1350
+ return
1288
1351
  self._active_seq += 1
1289
1352
  self._change_ring.note(self._active_seq, rid)
1290
1353
 
@@ -0,0 +1,131 @@
1
+ """An index build (the first `list_run_index` / `warm_session_index` of a store) replays the
2
+ journal tail before its mark (0.15.2, backlog 0863) WITHOUT announcing those records as changes:
3
+ `change_token` does not move for a read and `changed_run_ids` names nothing. In 0.15.2 the replay
4
+ noted every replayed `+id` on the change ring, so after each build a change-driven consumer (the
5
+ gateway's mail notification check) saw every finished run as changed and loaded them all
6
+ (AbstractGateway backlog 0965: `test_400_finished_runs_a_change_to_one_loads_exactly_one`)."""
7
+
8
+ from __future__ import annotations
9
+
10
+ from pathlib import Path
11
+
12
+ from abstractruntime.core.models import RunState, RunStatus
13
+ from abstractruntime.storage.json_files import JsonFileRunStore
14
+
15
+
16
+ def _run(rid: str, status: RunStatus, i: int) -> RunState:
17
+ return RunState(run_id=rid, workflow_id="w", status=status, current_node="n", vars={}, actor_id="t",
18
+ updated_at=f"2020-01-01T00:{i // 60:02d}:{i % 60:02d}+00:00")
19
+
20
+
21
+ def test_an_index_build_does_not_move_the_change_token(tmp_path: Path) -> None:
22
+ store = JsonFileRunStore(tmp_path / "runs")
23
+ for i in range(400):
24
+ store.save(_run(f"done-{i:03d}", RunStatus.COMPLETED if i % 2 else RunStatus.FAILED, i))
25
+ token = store.change_token()
26
+ assert len(store.list_run_index(status=RunStatus.COMPLETED, limit=200)) == 200
27
+ assert len(store.list_run_index(status=RunStatus.FAILED, limit=200)) == 200
28
+ store.warm_session_index()
29
+ assert store.change_token() == token, "a read moved the change token"
30
+ assert store.changed_run_ids(token) == set(), "a read announced runs as changed"
31
+
32
+ # A real change after the build is still announced (this store), or unknown (another process).
33
+ store.save(_run("done-400", RunStatus.COMPLETED, 400))
34
+ assert store.changed_run_ids(token) == {"done-400"}
35
+ token2 = store.change_token()
36
+ JsonFileRunStore(tmp_path / "runs").save(_run("foreign", RunStatus.COMPLETED, 401))
37
+ assert store.changed_run_ids(token2) is None
38
+
39
+
40
+ def test_a_run_another_store_created_before_the_mark_is_still_filed_by_the_replay(tmp_path: Path) -> None:
41
+ """The 0.15.2 guarantee (backlog 0863) survives: the replay files a run whose `+` line
42
+ landed before the mark; it only stops announcing it."""
43
+ writer = JsonFileRunStore(tmp_path / "runs")
44
+ for i in range(20):
45
+ writer.save(_run(f"r-{i:02d}", RunStatus.COMPLETED, i))
46
+ reader = JsonFileRunStore(tmp_path / "runs")
47
+ token = reader.change_token()
48
+ writer.save(RunState(run_id="late", workflow_id="w", status=RunStatus.WAITING, current_node="n", vars={},
49
+ actor_id="t", session_id="s1"))
50
+ reader.warm_session_index()
51
+ rows = reader.list_run_index(session_id="s1", limit=10)
52
+ assert [r["run_id"] for r in rows] == ["late"]
53
+ assert "late" in {r["run_id"] for r in reader.list_run_index(status=RunStatus.WAITING, limit=10)}
54
+ # Another process wrote the journal: the change set is unknown, never silently empty.
55
+ assert reader.changed_run_ids(token) is None
56
+
57
+
58
+ def _publish_without_a_journal_line(src_dir: Path, dest_store: JsonFileRunStore, run: RunState) -> None:
59
+ """A run file landing in the folder with no new journal record: its `+id` was appended earlier
60
+ (J53-1: the line goes first, the file after), here by a store in another folder."""
61
+ import shutil
62
+
63
+ JsonFileRunStore(src_dir).save(run)
64
+ shutil.copyfile(src_dir / f"run_{run.run_id}.json", dest_store._base / f"run_{run.run_id}.json.tmp")
65
+ (dest_store._base / f"run_{run.run_id}.json.tmp").replace(dest_store._base / f"run_{run.run_id}.json")
66
+
67
+
68
+ def test_a_run_published_during_the_scan_is_announced_by_the_replay(tmp_path: Path) -> None:
69
+ """Review (DESK1): the replay is quiet only for what the store knew before the build's mark. A
70
+ `+X` appended before the mark whose file lands DURING the scan (the J53-1 window: line first,
71
+ file after) must still be announced: a consumer whose token already covers that line would
72
+ otherwise never learn of X. The file lands on the scan's first file read, so the scan's own
73
+ sync replays `+X` with the file present (the pending re-check never sees it)."""
74
+ writer = JsonFileRunStore(tmp_path / "runs")
75
+ for i in range(20):
76
+ writer.save(_run(f"r-{i:02d}", RunStatus.COMPLETED, i))
77
+ writer._persist_scan_memo() # the sidecar: what a restarted store knows at its mark
78
+ reader = JsonFileRunStore(tmp_path / "runs")
79
+ writer._journal_append("+late") # the line, before the file (another process mid-save)
80
+ token = reader.change_token() # covers the `+late` line already
81
+ real = reader._scan_fields
82
+ landed = {"done": False}
83
+
84
+ def scan_fields(p):
85
+ if not landed["done"]:
86
+ landed["done"] = True
87
+ _publish_without_a_journal_line(tmp_path / "other", reader, _run("late", RunStatus.COMPLETED, 99))
88
+ return real(p)
89
+
90
+ reader._scan_fields = scan_fields # type: ignore[method-assign]
91
+ reader.warm_session_index() # the build: mark, scan (late lands on the first read), sync
92
+ assert landed["done"]
93
+ assert "late" in {r["run_id"] for r in reader.list_run_index(status=RunStatus.COMPLETED, limit=50)}
94
+ assert reader.changed_run_ids(token) == {"late"}, "a run the store did not know before the mark must be announced"
95
+
96
+
97
+ def test_a_store_without_a_sidecar_announces_its_first_replay(tmp_path: Path) -> None:
98
+ """No sidecar, nothing saved by this store: at its mark it knows no file, so the replayed
99
+ records are announced (a bounded one-off: the 16 KiB tail), never silently dropped."""
100
+ writer = JsonFileRunStore(tmp_path / "runs")
101
+ for i in range(20):
102
+ writer.save(_run(f"r-{i:02d}", RunStatus.COMPLETED, i))
103
+ reader = JsonFileRunStore(tmp_path / "runs")
104
+ token = reader.change_token()
105
+ reader.warm_session_index()
106
+ assert reader.changed_run_ids(token) == {f"r-{i:02d}" for i in range(20)}
107
+
108
+
109
+ def test_a_run_unlinked_during_the_scan_is_announced_by_the_replay(tmp_path: Path) -> None:
110
+ """A `-X` appended before the mark whose unlink lands right after the scan recorded X: the
111
+ store knew X (its scan), so the replay announces that it is gone."""
112
+ writer = JsonFileRunStore(tmp_path / "runs")
113
+ for i in range(20):
114
+ writer.save(_run(f"r-{i:02d}", RunStatus.COMPLETED, i))
115
+ writer._persist_scan_memo()
116
+ reader = JsonFileRunStore(tmp_path / "runs")
117
+ writer._journal_append("-r-07") # the line, before the unlink
118
+ token = reader.change_token()
119
+ real = reader._scan_fields
120
+
121
+ def scan_fields(p):
122
+ out = real(p)
123
+ if p.name == "run_r-07.json" and p.exists():
124
+ p.unlink() # gone right after the scan recorded it
125
+ return out
126
+
127
+ reader._scan_fields = scan_fields # type: ignore[method-assign]
128
+ reader.warm_session_index() # the build: mark, scan (r-07 recorded, then gone), sync
129
+ assert not (tmp_path / "runs" / "run_r-07.json").exists()
130
+ assert "r-07" not in {r["run_id"] for r in reader.list_run_index(status=RunStatus.COMPLETED, limit=50)}
131
+ assert reader.changed_run_ids(token) == {"r-07"}, "a run gone since the store knew it must be announced"
@@ -1,11 +0,0 @@
1
- ### Fixed
2
-
3
- - **An index build no longer loses a run another store object creates during it** (`JsonFileRunStore`, backlog 0863).
4
- A new run's `+` journal line is written before its file is published; a session/children/active index build that
5
- marked the journal between the two and scanned the folder before the file landed missed the run: the listing until
6
- the next reconciliation, the session and children indexes for the life of the store object (the reconciliation
7
- repaired only the listing). Seen as a gateway that answered 404 `session_not_found` when archiving a session written
8
- while it booted (AbstractGateway backlog 0963); a split-mode runner creating a run during the API process's boot
9
- hit the same window. The first sync after a build now re-applies the journal's last 16 KiB before the build's mark
10
- (`JOURNAL_REPLAY_TAIL_BYTES`; idempotent, once per build), and the reconciliation re-files a run it repairs into
11
- the session and children indexes too (and drops a vanished one from them).