AbstractRuntime 0.15.3__tar.gz → 0.16.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (887) hide show
  1. abstractruntime-0.16.0/.github/workflows/changelog.yml +23 -0
  2. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/CHANGELOG.md +82 -0
  3. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/CONTRIBUTING.md +4 -2
  4. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/PKG-INFO +33 -8
  5. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/README.md +29 -4
  6. abstractruntime-0.16.0/changelog.d/README.md +21 -0
  7. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/README.md +5 -1
  8. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/api.md +115 -8
  9. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/architecture.md +39 -4
  10. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/README.md +1 -0
  11. abstractruntime-0.16.0/docs/backlog/completed/0864_facade_catalog_hub_search_pages.md +27 -0
  12. abstractruntime-0.16.0/docs/backlog/planned/0866_queued_state_in_the_ledger_and_pools_lend_never_build.md +55 -0
  13. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/entity-runtime.md +15 -0
  14. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/faq.md +1 -1
  15. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/getting-started.md +2 -2
  16. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/integrations/abstractcore.md +153 -5
  17. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/replay.md +31 -0
  18. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/troubleshooting.md +30 -1
  19. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/llms-full.txt +424 -28
  20. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/llms.txt +12 -4
  21. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/pyproject.toml +6 -4
  22. abstractruntime-0.16.0/release-notes.md +76 -0
  23. abstractruntime-0.16.0/scripts/changelog.py +148 -0
  24. abstractruntime-0.16.0/skills/abstractruntime/SKILL.md +267 -0
  25. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/conversation_search.py +3 -1
  26. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/models.py +4 -1
  27. abstractruntime-0.16.0/src/abstractruntime/core/questions.py +54 -0
  28. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/runtime.py +296 -19
  29. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/history_bundle.py +40 -6
  30. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/visit_workflow.py +74 -0
  31. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/config_facade.py +75 -3
  32. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +98 -115
  33. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/llm_client.py +516 -35
  34. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/output_specs.py +1 -1
  35. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/run_facade.py +43 -0
  36. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/server_facade.py +11 -0
  37. abstractruntime-0.16.0/src/abstractruntime/integrations/abstractcore/structured_output.py +152 -0
  38. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/view.py +90 -4
  39. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/scheduler/multi_store.py +3 -2
  40. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/in_memory.py +2 -2
  41. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/json_files.py +2 -2
  42. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/sqlite.py +3 -2
  43. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +6 -0
  44. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/compiler.py +65 -1
  45. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/executor.py +121 -7
  46. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +6 -0
  47. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_abstractcore_server_facade.py +29 -0
  48. abstractruntime-0.16.0/tests/test_changelog_fragments.py +78 -0
  49. abstractruntime-0.16.0/tests/test_config_facade_model_contexts.py +44 -0
  50. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_config_facade_models_engines.py +34 -0
  51. abstractruntime-0.16.0/tests/test_conversational_questions.py +234 -0
  52. abstractruntime-0.16.0/tests/test_decision_facade_and_node.py +878 -0
  53. abstractruntime-0.16.0/tests/test_decision_output.py +466 -0
  54. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_execution_capability_discovery.py +6 -2
  55. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_hf_process_residency_merge.py +16 -0
  56. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_kg_learn_and_recall_contract.py +2 -2
  57. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_call_response_schema_normalization.py +19 -29
  58. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_call_structured_output_fallback.py +2 -2
  59. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_retry_classification.py +33 -0
  60. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_model_residency_clean_switch.py +5 -2
  61. abstractruntime-0.16.0/tests/test_model_residency_release_and_readable_holders.py +207 -0
  62. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_packaging_extras.py +3 -3
  63. abstractruntime-0.16.0/tests/test_public_action_approval_context.py +89 -0
  64. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_remote_llm_client.py +32 -0
  65. abstractruntime-0.16.0/tests/test_replay_public_updates.py +136 -0
  66. abstractruntime-0.16.0/tests/test_residency_fit_refusal_broadcast.py +80 -0
  67. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_run_history_bundle.py +56 -0
  68. abstractruntime-0.16.0/tests/test_structured_schema_execution_client.py +206 -0
  69. abstractruntime-0.16.0/tests/test_visit_live_guidance.py +81 -0
  70. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_schema_enum_switch.py +3 -14
  71. abstractruntime-0.16.0/tests/test_voice_projection_contract.py +216 -0
  72. abstractruntime-0.15.3/release-notes.md +0 -14
  73. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/.github/workflows/ci.yml +0 -0
  74. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/.github/workflows/release.yml +0 -0
  75. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/.gitignore +0 -0
  76. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/ACKNOWLEDGMENTS.md +0 -0
  77. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/CODE_OF_CONDUCT.md +0 -0
  78. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/LICENSE +0 -0
  79. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/ROADMAP.md +0 -0
  80. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/SECURITY.md +0 -0
  81. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  82. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  83. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  84. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  85. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  86. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  87. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
  88. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/adr/0008_integration_facades_are_the_complete_host_surface.md +0 -0
  89. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/adr/0010_one_replay_many_views.md +0 -0
  90. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/adr/0011_memory_facade_is_the_complete_host_surface_for_abstractmemory.md +0 -0
  91. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/adr/README.md +0 -0
  92. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/artifacts.md +0 -0
  93. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/automations.md +0 -0
  94. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  95. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  96. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  97. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  98. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
  99. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
  100. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
  101. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
  102. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/003_wait_primitives.md +0 -0
  103. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
  104. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
  105. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
  106. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
  107. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  108. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  109. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  110. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  111. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/009_artifact_store.md +0 -0
  112. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  113. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  114. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  115. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  116. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  117. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  118. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  119. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  120. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  121. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  122. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  123. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  124. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  125. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  126. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  127. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
  128. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
  129. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0851_per_account_voice_stores.md +0 -0
  130. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0852_capability_refusals_are_not_retried.md +0 -0
  131. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0855_prefix_stability_contract_of_consecutive_llm_calls.md +0 -0
  132. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0856_memory_facade_and_ledger_provenance.md +0 -0
  133. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0862_is_empty_accepts_lists.md +0 -0
  134. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/completed/0863_index_build_never_loses_a_run_created_during_it.md +0 -0
  135. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  136. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  137. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  138. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  139. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
  140. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  141. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  142. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  143. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/004_tests.md +0 -0
  144. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  145. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  146. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  147. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  148. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/README.md +0 -0
  149. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  150. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
  151. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  152. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  153. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  154. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  155. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
  156. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  157. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
  158. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
  159. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
  160. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
  161. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
  162. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/0853_session_tool_policy_before_the_approval_wait.md +0 -0
  163. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/0854_replay_view.md +0 -0
  164. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/0857_entity_direct_memory_writes_provenance.md +0 -0
  165. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/0858_typed_runs_run_type_stamped_at_start.md +0 -0
  166. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/0859_replay_view_ephemeral_text_deltas.md +0 -0
  167. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
  168. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
  169. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_portability/README.md +0 -0
  170. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
  171. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
  172. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
  173. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
  174. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
  175. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
  176. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
  177. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
  178. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
  179. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
  180. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
  181. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
  182. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
  183. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
  184. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
  185. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
  186. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  187. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
  188. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
  189. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
  190. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/0849_conversation_search_tool_usage_outputs_and_thinking.md +0 -0
  191. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/0850_growing_automation_history_out_of_the_controller_ledger.md +0 -0
  192. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/0860_replay_view_stop_wording_from_the_ledger.md +0 -0
  193. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/0861_replay_view_activity_tool_sandbox_and_call_timings.md +0 -0
  194. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/0862_replay_view_message_artifacts_exclude_bookkeeping.md +0 -0
  195. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
  196. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
  197. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
  198. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
  199. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
  200. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
  201. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
  202. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
  203. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
  204. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/email.md +0 -0
  205. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/evidence.md +0 -0
  206. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/integrations/abstractmemory.md +0 -0
  207. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/limits.md +0 -0
  208. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/manual_testing.md +0 -0
  209. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/mcp-worker.md +0 -0
  210. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/proposal.md +0 -0
  211. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/provenance.md +0 -0
  212. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/snapshots.md +0 -0
  213. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/tool-approval.md +0 -0
  214. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/tools-comms.md +0 -0
  215. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/docs/workflow-bundles.md +0 -0
  216. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/examples/01_hello_world.py +0 -0
  217. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/examples/02_ask_user.py +0 -0
  218. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/examples/03_wait_until.py +0 -0
  219. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/examples/04_multi_step.py +0 -0
  220. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/examples/05_persistence.py +0 -0
  221. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/examples/06_llm_integration.py +0 -0
  222. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/examples/07_react_agent.py +0 -0
  223. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/examples/README.md +0 -0
  224. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/mkdocs.yml +0 -0
  225. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/pytest.ini +0 -0
  226. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/scripts/backfill_diary_edges.py +0 -0
  227. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/scripts/generate_llms_full.py +0 -0
  228. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/scripts/regen_replay_conformance.py +0 -0
  229. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/__init__.py +0 -0
  230. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automation_queries.py +0 -0
  231. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/__init__.py +0 -0
  232. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/adapters.py +0 -0
  233. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/attention.py +0 -0
  234. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/bundle.py +0 -0
  235. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
  236. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
  237. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/commands.py +0 -0
  238. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/consumers.py +0 -0
  239. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/controller.py +0 -0
  240. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/ledger.py +0 -0
  241. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/models.py +0 -0
  242. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/samples.py +0 -0
  243. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/service.py +0 -0
  244. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/automations/wakes.py +0 -0
  245. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/__init__.py +0 -0
  246. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/config.py +0 -0
  247. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/effect_cancellation.py +0 -0
  248. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/event_keys.py +0 -0
  249. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/health.py +0 -0
  250. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/live_deltas.py +0 -0
  251. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/policy.py +0 -0
  252. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/progress_channel.py +0 -0
  253. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/publish.py +0 -0
  254. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/run_attribution.py +0 -0
  255. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/run_identity.py +0 -0
  256. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/run_lifecycle.py +0 -0
  257. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/run_origin.py +0 -0
  258. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/spec.py +0 -0
  259. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/step_context.py +0 -0
  260. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/tool_scope.py +0 -0
  261. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/core/vars.py +0 -0
  262. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/documents/__init__.py +0 -0
  263. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/documents/charts.py +0 -0
  264. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/documents/docx.py +0 -0
  265. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/documents/pdf.py +0 -0
  266. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/email/__init__.py +0 -0
  267. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/email/actions.py +0 -0
  268. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/email/automations.py +0 -0
  269. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/email/binding.py +0 -0
  270. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/email/feeder.py +0 -0
  271. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/email/frame.py +0 -0
  272. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/email/inbox.py +0 -0
  273. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/evidence/__init__.py +0 -0
  274. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/evidence/recorder.py +0 -0
  275. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/__init__.py +0 -0
  276. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/act_only.py +0 -0
  277. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/chat.py +0 -0
  278. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/communities.py +0 -0
  279. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/diary.py +0 -0
  280. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/digest.py +0 -0
  281. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/entity_runtime.py +0 -0
  282. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/fingerprint.py +0 -0
  283. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/lease.py +0 -0
  284. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/life.py +0 -0
  285. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/memory_reader.py +0 -0
  286. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/night_voice.py +0 -0
  287. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/phase_graph.py +0 -0
  288. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/phase_spec.py +0 -0
  289. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/prelude.py +0 -0
  290. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/prompt_overlay.py +0 -0
  291. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/reflection.py +0 -0
  292. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
  293. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/substrate.py +0 -0
  294. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/tool_effects.py +0 -0
  295. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/tool_policy.py +0 -0
  296. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/identity/tools.py +0 -0
  297. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/__init__.py +0 -0
  298. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  299. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
  300. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
  301. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  302. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  303. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
  304. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  305. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
  306. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
  307. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
  308. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  309. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
  310. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
  311. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
  312. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  313. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
  314. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  315. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
  316. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  317. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  318. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
  319. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  320. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  321. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
  322. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
  323. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
  324. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/voice_facade.py +0 -0
  325. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/voice_library.py +0 -0
  326. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  327. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  328. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
  329. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  330. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
  331. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractmemory/memory_facade.py +0 -0
  332. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
  333. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/mail_verbs.py +0 -0
  334. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/memory/__init__.py +0 -0
  335. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/memory/active_context.py +0 -0
  336. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/memory/active_memory.py +0 -0
  337. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/memory/compaction.py +0 -0
  338. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/memory/kg_packets.py +0 -0
  339. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/memory/memact_composer.py +0 -0
  340. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/memory/recall_levels.py +0 -0
  341. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/memory/token_budget.py +0 -0
  342. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/rendering/__init__.py +0 -0
  343. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  344. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/rendering/json_stringify.py +0 -0
  345. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/__init__.py +0 -0
  346. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/__init__.py +0 -0
  347. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/expected_view.json +0 -0
  348. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/manifest.json +0 -0
  349. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/records.json +0 -0
  350. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/runs.json +0 -0
  351. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/expected_view.json +0 -0
  352. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/manifest.json +0 -0
  353. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/records.json +0 -0
  354. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/runs.json +0 -0
  355. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/expected_view.json +0 -0
  356. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/manifest.json +0 -0
  357. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/records.json +0 -0
  358. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/runs.json +0 -0
  359. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/expected_view.json +0 -0
  360. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/manifest.json +0 -0
  361. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/records.json +0 -0
  362. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/runs.json +0 -0
  363. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/d_cancellation/expected_view.json +0 -0
  364. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/d_cancellation/manifest.json +0 -0
  365. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/d_cancellation/records.json +0 -0
  366. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/d_cancellation/runs.json +0 -0
  367. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/expected_view.json +0 -0
  368. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/manifest.json +0 -0
  369. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/records.json +0 -0
  370. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/runs.json +0 -0
  371. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/expected_view.json +0 -0
  372. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/manifest.json +0 -0
  373. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/records.json +0 -0
  374. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/runs.json +0 -0
  375. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/f_windowed_slim/expected_view.json +0 -0
  376. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/f_windowed_slim/manifest.json +0 -0
  377. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/f_windowed_slim/records.json +0 -0
  378. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/f_windowed_slim/runs.json +0 -0
  379. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/g_ask_user/expected_view.json +0 -0
  380. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/g_ask_user/manifest.json +0 -0
  381. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/g_ask_user/records.json +0 -0
  382. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/g_ask_user/runs.json +0 -0
  383. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/h_denied_approval/expected_view.json +0 -0
  384. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/h_denied_approval/manifest.json +0 -0
  385. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/h_denied_approval/records.json +0 -0
  386. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/h_denied_approval/runs.json +0 -0
  387. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/i_wait_kinds/expected_view.json +0 -0
  388. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/i_wait_kinds/manifest.json +0 -0
  389. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/i_wait_kinds/records.json +0 -0
  390. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/i_wait_kinds/runs.json +0 -0
  391. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/expected_view.json +0 -0
  392. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/manifest.json +0 -0
  393. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/records.json +0 -0
  394. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/runs.json +0 -0
  395. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/k_nested_delegation/expected_view.json +0 -0
  396. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/k_nested_delegation/manifest.json +0 -0
  397. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/k_nested_delegation/records.json +0 -0
  398. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/k_nested_delegation/runs.json +0 -0
  399. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/expected_view.json +0 -0
  400. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/manifest.json +0 -0
  401. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/records.json +0 -0
  402. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/runs.json +0 -0
  403. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/expected_view.json +0 -0
  404. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/manifest.json +0 -0
  405. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/records.json +0 -0
  406. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/runs.json +0 -0
  407. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/delta.py +0 -0
  408. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/replay/executions.py +0 -0
  409. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/scheduler/__init__.py +0 -0
  410. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/scheduler/convenience.py +0 -0
  411. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/scheduler/registry.py +0 -0
  412. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/scheduler/scheduler.py +0 -0
  413. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/session_history.py +0 -0
  414. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/session_turns.py +0 -0
  415. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/__init__.py +0 -0
  416. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/artifacts.py +0 -0
  417. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/base.py +0 -0
  418. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/change_ring.py +0 -0
  419. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/commands.py +0 -0
  420. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/lease.py +0 -0
  421. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/ledger_chain.py +0 -0
  422. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/ledger_slim.py +0 -0
  423. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/observable.py +0 -0
  424. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/offloading.py +0 -0
  425. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/serialize.py +0 -0
  426. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/session_tool_policy.py +0 -0
  427. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/snapshots.py +0 -0
  428. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/storage/steer_sidecar.py +0 -0
  429. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/triggers/__init__.py +0 -0
  430. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/triggers/cloudevents.py +0 -0
  431. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/triggers/connection_events.py +0 -0
  432. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/triggers/connections.py +0 -0
  433. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/triggers/email_received.py +0 -0
  434. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/triggers/event_frame.py +0 -0
  435. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/triggers/feed.py +0 -0
  436. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/triggers/manual.py +0 -0
  437. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/triggers/protocol.py +0 -0
  438. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/triggers/registry.py +0 -0
  439. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/triggers/schedule.py +0 -0
  440. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/triggers/webhook.py +0 -0
  441. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/turn_grounding.py +0 -0
  442. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/utils/__init__.py +0 -0
  443. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/utils/atomic_files.py +0 -0
  444. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/utils/file_filters.py +0 -0
  445. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/utils/workspace_paths.py +0 -0
  446. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  447. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  448. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  449. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  450. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  451. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  452. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  453. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  454. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  455. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  456. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  457. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  458. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  459. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  460. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  461. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
  462. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
  463. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
  464. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
  465. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  466. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  467. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
  468. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  469. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/workflow_bundle/models.py +0 -0
  470. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  471. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  472. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  473. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/README.md +0 -0
  474. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/automation_harness.py +0 -0
  475. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/conftest.py +0 -0
  476. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/email_wp2_support.py +0 -0
  477. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/fixtures/feeds/atom.xml +0 -0
  478. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/fixtures/feeds/rdf-not-a-feed.xml +0 -0
  479. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/fixtures/feeds/rss1-malformed.xml +0 -0
  480. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/fixtures/feeds/rss1.xml +0 -0
  481. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/fixtures/feeds/rss2.xml +0 -0
  482. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/fixtures/schedule_v1_corpus.json +0 -0
  483. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/live_email/conftest.py +0 -0
  484. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/live_email/live_email_support.py +0 -0
  485. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/live_email/test_email_live_runtime.py +0 -0
  486. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/media_endpoint_profile_probe.py +0 -0
  487. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_abstractcore_comms_facade.py +0 -0
  488. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_abstractcore_discovery_facade.py +0 -0
  489. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_abstractcore_host_facade.py +0 -0
  490. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_abstractcore_run_facade.py +0 -0
  491. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_abstractcore_structured_facade.py +0 -0
  492. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_abstractcore_telegram_facade.py +0 -0
  493. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_active_consumers_index.py +0 -0
  494. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_active_context_policy.py +0 -0
  495. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_active_index.py +0 -0
  496. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_active_memory.py +0 -0
  497. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_agora_agent_alias_identity.py +0 -0
  498. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_agora_tools_http.py +0 -0
  499. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_analyze_media_addressing_and_walling.py +0 -0
  500. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_answer_user_effect.py +0 -0
  501. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_artifact_session_candidates.py +0 -0
  502. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_artifacts.py +0 -0
  503. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_calendar_schedule.py +0 -0
  504. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_commands.py +0 -0
  505. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_controller.py +0 -0
  506. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_controller_recovery.py +0 -0
  507. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_definition.py +0 -0
  508. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_discussion_isolation.py +0 -0
  509. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_email_results.py +0 -0
  510. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_growing_context.py +0 -0
  511. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_index.py +0 -0
  512. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_list_reads.py +0 -0
  513. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_named_policy_compiler.py +0 -0
  514. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_next_fire.py +0 -0
  515. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_occurrence_input_resolver.py +0 -0
  516. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_occurrence_recovery.py +0 -0
  517. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_replay_read_only.py +0 -0
  518. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_retry.py +0 -0
  519. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_session_turns.py +0 -0
  520. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_status.py +0 -0
  521. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_automation_tool_approval.py +0 -0
  522. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_browser_probe_target_walling.py +0 -0
  523. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_budget_law_no_unrequested_caps.py +0 -0
  524. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_capability_default_reasoning.py +0 -0
  525. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_chat_summarizer_integration.py +0 -0
  526. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_code_node_imports.py +0 -0
  527. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_code_node_restricted_python.py +0 -0
  528. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_command_sandbox_host_facade.py +0 -0
  529. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_command_store.py +0 -0
  530. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_compaction_helpers.py +0 -0
  531. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_compaction_summarizer_route.py +0 -0
  532. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_config_facade_voice_input_hint.py +0 -0
  533. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_control_adapter_while.py +0 -0
  534. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_controller_bundle_packaged.py +0 -0
  535. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_conversation_search.py +0 -0
  536. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_crash_ordering_inversions.py +0 -0
  537. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_create_if_absent.py +0 -0
  538. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_data_registry_facade.py +0 -0
  539. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_default_model_warmup_switch.py +0 -0
  540. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_default_tools_camera_gating.py +0 -0
  541. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_default_tools_comms_gating.py +0 -0
  542. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_default_tools_include_skim_files.py +0 -0
  543. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_default_tools_include_skim_folders.py +0 -0
  544. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_default_tools_include_skim_web.py +0 -0
  545. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_default_tools_search_files_executor.py +0 -0
  546. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_diary_capture.py +0 -0
  547. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_diary_write_rescue.py +0 -0
  548. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_directory_lease.py +0 -0
  549. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_disabled_toolsets_seam.py +0 -0
  550. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_discovery_survives_unbuildable_default.py +0 -0
  551. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_discovery_tts_unavailable_reason.py +0 -0
  552. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_discovery_voice_openai_api_key.py +0 -0
  553. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_discussion_session_anchor.py +0 -0
  554. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_document_markdown_tables.py +0 -0
  555. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_document_renderers_hr_quote.py +0 -0
  556. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_durable_toolsets.py +0 -0
  557. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_durable_write_discipline.py +0 -0
  558. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  559. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_effect_cancellation.py +0 -0
  560. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_effect_issuance_idempotency.py +0 -0
  561. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_effect_payload_stays_json_serializable.py +0 -0
  562. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_election_consequence_teaching.py +0 -0
  563. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_email_binding_and_refiner.py +0 -0
  564. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_email_feeder_batched.py +0 -0
  565. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_email_feeder_flags.py +0 -0
  566. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_email_gate_fixes.py +0 -0
  567. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_email_inbox_and_trigger.py +0 -0
  568. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_email_received_mailbox_id.py +0 -0
  569. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_email_regate_fixes.py +0 -0
  570. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_email_review_fixes.py +0 -0
  571. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_email_self_trigger_loop.py +0 -0
  572. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_email_stream_consumers.py +0 -0
  573. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_email_toolset_and_walls.py +0 -0
  574. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_emergence_experiment.py +0 -0
  575. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_emit_event_uses_wait_index.py +0 -0
  576. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_emit_event_without_workflow_registry.py +0 -0
  577. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_endpoint_profile_media_end_to_end.py +0 -0
  578. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_endpoint_profile_media_in_process.py +0 -0
  579. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_endpoint_profile_media_specs_keep_provider.py +0 -0
  580. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_endpoint_profile_route_context.py +0 -0
  581. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_awake_memory_fixes.py +0 -0
  582. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_brain_effects.py +0 -0
  583. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_chat_driver.py +0 -0
  584. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_chat_tools_reflection.py +0 -0
  585. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_diary.py +0 -0
  586. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_execute_tool.py +0 -0
  587. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_fetch_url_tool.py +0 -0
  588. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_history_window.py +0 -0
  589. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_life_loop.py +0 -0
  590. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_memory_richness.py +0 -0
  591. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_phase_graph_conformance.py +0 -0
  592. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_react_visit_window.py +0 -0
  593. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_recent_memories.py +0 -0
  594. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_runtime.py +0 -0
  595. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_search_memory.py +0 -0
  596. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
  597. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_substrate_resolution.py +0 -0
  598. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_visit_honesty.py +0 -0
  599. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_workspace_cap.py +0 -0
  600. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_entity_workspace_tools.py +0 -0
  601. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_event_index_cross_process.py +0 -0
  602. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_event_wait_index.py +0 -0
  603. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
  604. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_evidence_recorder.py +0 -0
  605. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
  606. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_execute_command_output_offload.py +0 -0
  607. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_explicit_eject_other_clients.py +0 -0
  608. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_factory_default_retry_policy.py +0 -0
  609. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  610. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_format_repair_nudge.py +0 -0
  611. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_fresh_install_no_provider.py +0 -0
  612. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_gateway_facades_c4899.py +0 -0
  613. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_git_read_only_refiner.py +0 -0
  614. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_history_window_multimodal.py +0 -0
  615. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_hot_path_store_reads.py +0 -0
  616. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_indexed_idempotency_lookup.py +0 -0
  617. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_integration_abstractcore.py +0 -0
  618. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_integrations_abstractcore.py +0 -0
  619. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_json_file_run_store_change_token_after_build.py +0 -0
  620. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_json_file_run_store_children_index.py +0 -0
  621. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_json_file_run_store_index_build_race.py +0 -0
  622. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_json_run_cache_bound.py +0 -0
  623. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_json_store_scan_memo.py +0 -0
  624. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_jsonl_ledger_recovery.py +0 -0
  625. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_jsonl_ledger_seq_cross_process.py +0 -0
  626. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_jsonl_row_index.py +0 -0
  627. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_ledger_chain.py +0 -0
  628. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_ledger_cursor_invariants.py +0 -0
  629. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_ledger_get_record.py +0 -0
  630. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_ledger_record_slimming.py +0 -0
  631. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_ledger_subscription.py +0 -0
  632. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_live_token_deltas.py +0 -0
  633. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_call_media_artifact_refs.py +0 -0
  634. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  635. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  636. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_call_payload_shape_refusal.py +0 -0
  637. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_call_prefix_stability_contract.py +0 -0
  638. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_call_requires_prompt.py +0 -0
  639. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_call_text_phase_progress.py +0 -0
  640. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  641. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  642. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  643. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_client_grounding_tail.py +0 -0
  644. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_client_media_artifacts.py +0 -0
  645. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_client_system_context.py +0 -0
  646. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_client_tool_call_parsing.py +0 -0
  647. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_llm_streaming_on_token.py +0 -0
  648. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_local_helper_tool_exposure.py +0 -0
  649. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_local_residency_host_sweep.py +0 -0
  650. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  651. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_mail_verbs.py +0 -0
  652. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_mailbox_index.py +0 -0
  653. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_max_iterations_ceiling.py +0 -0
  654. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_mcp_remote_tool_executor.py +0 -0
  655. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
  656. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_mcp_worker_logging.py +0 -0
  657. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_mcp_worker_security.py +0 -0
  658. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_mcp_worker_stdio.py +0 -0
  659. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_media_artifact_resolution.py +0 -0
  660. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_media_capability_default_routing.py +0 -0
  661. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_media_host_endpoint_resolver.py +0 -0
  662. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_media_only_requests_skip_text_client.py +0 -0
  663. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_media_subprocess.py +0 -0
  664. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memact_composer_from_kg_result.py +0 -0
  665. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_appraise_handler.py +0 -0
  666. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_communities.py +0 -0
  667. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_facade.py +0 -0
  668. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  669. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_kg_packets.py +0 -0
  670. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  671. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  672. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  673. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  674. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_note_effect.py +0 -0
  675. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_query_effect.py +0 -0
  676. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_query_rich_filters.py +0 -0
  677. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_revise.py +0 -0
  678. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  679. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_seam_handlers.py +0 -0
  680. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_seam_sqlite_durability.py +0 -0
  681. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_step_provenance.py +0 -0
  682. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_memory_tag_effect.py +0 -0
  683. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_mlx_generation_serialization.py +0 -0
  684. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_mlx_process_residency_merge.py +0 -0
  685. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_model_eject_cancel.py +0 -0
  686. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_model_residency_control_plane.py +0 -0
  687. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
  688. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_multi_store_scheduler.py +0 -0
  689. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_multimodal_abstractcore_integration.py +0 -0
  690. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_native_mlx_application_wiring.py +0 -0
  691. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_native_mlx_execution_controls_live.py +0 -0
  692. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_native_tool_channel.py +0 -0
  693. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_night_voice.py +0 -0
  694. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_no_default_provider_refusal_ux.py +0 -0
  695. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_occurrence_named_inputs.py +0 -0
  696. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_occurrence_samples.py +0 -0
  697. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_offload_answer_chain_c4978.py +0 -0
  698. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
  699. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_offloading.py +0 -0
  700. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_parallel_readonly_tool_execution.py +0 -0
  701. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_pause_resume.py +0 -0
  702. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_pdf_unicode_rendering.py +0 -0
  703. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_personal_cycle.py +0 -0
  704. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_phantom_attachment_index.py +0 -0
  705. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_phase_graph_artifact_control.py +0 -0
  706. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_phase_graph_obedience.py +0 -0
  707. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_phase_vocabulary_migration.py +0 -0
  708. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
  709. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_prompt_cache_export_import.py +0 -0
  710. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
  711. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_prompt_cache_modules.py +0 -0
  712. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_prompt_cache_posture_inheritance.py +0 -0
  713. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
  714. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_prompt_overlay.py +0 -0
  715. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_provider_endpoint_profile_resolution.py +0 -0
  716. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_provider_pin_routing_isolation.py +0 -0
  717. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_publish_event.py +0 -0
  718. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_queryable_run_store.py +0 -0
  719. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_r12_workspace_sandbox.py +0 -0
  720. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  721. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_read_idle_threading.py +0 -0
  722. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_readoption_experiment.py +0 -0
  723. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_real_integration.py +0 -0
  724. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_realize_election.py +0 -0
  725. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_recall_levels_policy.py +0 -0
  726. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_remote_client_cancel.py +0 -0
  727. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_remote_speculation_defaults.py +0 -0
  728. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_rendering_agent_trace_report.py +0 -0
  729. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_rendering_json_stringify.py +0 -0
  730. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_replay_conformance.py +0 -0
  731. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_replay_conformance_package.py +0 -0
  732. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_replay_cursor_token.py +0 -0
  733. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_replay_delta_cost.py +0 -0
  734. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_replay_invariants.py +0 -0
  735. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_replay_review_findings.py +0 -0
  736. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_replay_tool_policy.py +0 -0
  737. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_report_branding.py +0 -0
  738. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_resident_media_generation.py +0 -0
  739. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_resume_concurrent_same_wait.py +0 -0
  740. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_retry_idempotency.py +0 -0
  741. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_run_index_workspace_root.py +0 -0
  742. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_run_mutation_lock.py +0 -0
  743. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_run_origin.py +0 -0
  744. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_run_scoped_tool_policy.py +0 -0
  745. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_run_store_change_token.py +0 -0
  746. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_run_tool_scope_ceiling.py +0 -0
  747. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_runtime_browser_session_boundary.py +0 -0
  748. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  749. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_runtime_default_provider_model_refresh.py +0 -0
  750. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_runtime_effect_invocation_trace.py +0 -0
  751. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_runtime_health_and_bounded_vars.py +0 -0
  752. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_runtime_install_boundary.py +0 -0
  753. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  754. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_runtime_node_traces.py +0 -0
  755. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  756. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_runtime_tick_step_gate.py +0 -0
  757. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_schedule_run.py +0 -0
  758. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_schedule_v1_corpus.py +0 -0
  759. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_schedule_v2_calendar.py +0 -0
  760. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_scheduler.py +0 -0
  761. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_send_email_refiner.py +0 -0
  762. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_send_email_self_default_policy.py +0 -0
  763. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  764. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_session_history.py +0 -0
  765. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_session_prompt_cache_attribution.py +0 -0
  766. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_session_prompt_cache_visibility.py +0 -0
  767. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_session_route_stamp.py +0 -0
  768. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_session_start_cost.py +0 -0
  769. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_session_tool_policy.py +0 -0
  770. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_shell_tool_exposure.py +0 -0
  771. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_snapshots.py +0 -0
  772. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_speculation_inheritance.py +0 -0
  773. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_speculation_reaches_provider_construction.py +0 -0
  774. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_sqlite_ledger_store.py +0 -0
  775. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_start_subworkflow_async_wait.py +0 -0
  776. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  777. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  778. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_steer_sidecar.py +0 -0
  779. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_step_context.py +0 -0
  780. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_storage_deletion.py +0 -0
  781. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_streamed_voice_namespace.py +0 -0
  782. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_structured_output_schema_enum.py +0 -0
  783. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_subworkflow.py +0 -0
  784. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_terminal_effect_completion.py +0 -0
  785. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  786. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_thinking_inheritance.py +0 -0
  787. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  788. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_approval_executor.py +0 -0
  789. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_approval_resume_executes.py +0 -0
  790. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_approval_wait_key_identity.py +0 -0
  791. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_calls_idempotency_keys.py +0 -0
  792. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_catalog.py +0 -0
  793. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_descriptor_registry.py +0 -0
  794. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_executor_argument_sanitization.py +0 -0
  795. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_executor_error_output_detection.py +0 -0
  796. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_executor_filename_alias.py +0 -0
  797. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  798. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_executor_read_file_aliases.py +0 -0
  799. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_executor_timeout.py +0 -0
  800. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_inventory_facade.py +0 -0
  801. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_invoke_effect.py +0 -0
  802. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_policy_and_mounts.py +0 -0
  803. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_tool_wait_allowlist_safety.py +0 -0
  804. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_topic_election_world_model.py +0 -0
  805. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_trace_context_propagation.py +0 -0
  806. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_trigger_cloudevents.py +0 -0
  807. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_trigger_connection_listening.py +0 -0
  808. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_trigger_connections.py +0 -0
  809. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_trigger_feed.py +0 -0
  810. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_trigger_registry.py +0 -0
  811. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_trigger_schedule_math.py +0 -0
  812. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_trigger_webhook.py +0 -0
  813. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_trusted_run_index.py +0 -0
  814. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_turn_grounding_byte_stability.py +0 -0
  815. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_turn_grounding_carriers_a3.py +0 -0
  816. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_vars_query_effect.py +0 -0
  817. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visit_ab_fixture.py +0 -0
  818. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visit_midturn_elections.py +0 -0
  819. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visit_midturn_resume.py +0 -0
  820. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visit_workflow.py +0 -0
  821. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  822. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
  823. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  824. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  825. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  826. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  827. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_entity_memory_nodes.py +0 -0
  828. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
  829. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_llm_call_partial_override.py +0 -0
  830. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  831. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_loop_back_out_of_body.py +0 -0
  832. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
  833. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_loop_limit_on_wire.py +0 -0
  834. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_memact_compose_node.py +0 -0
  835. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  836. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  837. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  838. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_reroute_lowering.py +0 -0
  839. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_set_vars_pins.py +0 -0
  840. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_unknown_node_type_refuses.py +0 -0
  841. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
  842. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_add_message_builtin.py +0 -0
  843. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  844. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_agora_react_agent.py +0 -0
  845. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_call_tool_node.py +0 -0
  846. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
  847. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_compiler_basic.py +0 -0
  848. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  849. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_continue_on_error.py +0 -0
  850. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_edit_json_schema_node.py +0 -0
  851. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
  852. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_file_nodes_workspace.py +0 -0
  853. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_function_library.py +0 -0
  854. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_get_element_node.py +0 -0
  855. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_get_random_element_node.py +0 -0
  856. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_get_var_node.py +0 -0
  857. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_has_tools_builtin.py +0 -0
  858. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  859. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  860. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_make_object_node.py +0 -0
  861. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_media_nodes.py +0 -0
  862. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  863. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_memory_source_pins.py +0 -0
  864. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_pin_expressions.py +0 -0
  865. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_prompt_only.py +0 -0
  866. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_random_nodes.py +0 -0
  867. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_string_contains_replace.py +0 -0
  868. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_visualflow_tool_parameters_node.py +0 -0
  869. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_voice_library_facade.py +0 -0
  870. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_voice_openai_api_key_path.py +0 -0
  871. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_voice_stream_is_not_a_wait.py +0 -0
  872. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_w4_feelings_lens.py +0 -0
  873. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_wait_event_deadline.py +0 -0
  874. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_wait_event_prompt_metadata.py +0 -0
  875. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_wait_until_streak.py +0 -0
  876. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_wait_until_utc_normalization.py +0 -0
  877. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_workflow_bundle_registry.py +0 -0
  878. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_workspace_builtin_deny.py +0 -0
  879. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_workspace_context_allowed_workspaces.py +0 -0
  880. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
  881. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  882. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  883. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
  884. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_workspace_prompt_context.py +0 -0
  885. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_workspace_read_only.py +0 -0
  886. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_workspace_writable_paths.py +0 -0
  887. {abstractruntime-0.15.3 → abstractruntime-0.16.0}/tests/test_write_chart.py +0 -0
@@ -0,0 +1,23 @@
1
+ name: Changelog
2
+
3
+ on:
4
+ pull_request:
5
+
6
+ permissions:
7
+ contents: read
8
+
9
+ jobs:
10
+ changelog:
11
+ # A pull request that changes src/ adds a fragment, changelog.d/<pr-or-slug>.md, instead of
12
+ # editing CHANGELOG.md (scripts/changelog.py; changelog.d/README.md).
13
+ runs-on: ubuntu-latest
14
+ timeout-minutes: 5
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ with:
18
+ fetch-depth: 0
19
+ - uses: actions/setup-python@v5
20
+ with:
21
+ python-version: "3.12"
22
+ - name: Fragment present and well formed
23
+ run: python scripts/changelog.py check --base "origin/${{ github.base_ref }}"
@@ -5,8 +5,90 @@ All notable changes to AbstractRuntime will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ Unreleased changes live in [`changelog.d/`](changelog.d/README.md), one file per pull request;
9
+ `python scripts/changelog.py assemble X.Y.Z` writes them here at release.
10
+
8
11
  ## [Unreleased]
9
12
 
13
+ ## [0.16.0] - 2026-11-02
14
+
15
+ ### Added
16
+
17
+ - A package agent skill documents operating durable workflows, waits, storage and structured execution through the public Python API.
18
+
19
+ - **`config_facade.model_catalog(..., hub_page=, hub_page_size=)`** (backlog 0864) passes a page of Hugging Face search
20
+ results through to AbstractCore, which reports it in `hub.search`. It is passed only when asked. An AbstractCore
21
+ whose catalog has no `hub_page` raises `AbstractCoreTooOld` in words instead of answering page 1.
22
+ `AbstractCoreTooOld` accepts a `required=` description. `extended=True` (every quant of a row's own GGUF repos,
23
+ AbstractCore 0865) is passed the same way and refused in words on an AbstractCore without it.
24
+ - **Fit refusals (AbstractCore ADR 0010) reach every surface.** A load refused with `ModelDoesNotFitError` (the model
25
+ does not fit even after evicting what is not locked) is never retried (a retry would only evict more); its
26
+ sentence is the effect error, its fields (needed/free bytes, kept models, suggestions) are kept on the ledger
27
+ record (`result.error_details`, `EffectOutcome.error_details`) and in the residency diagnostics (`refusals`, the
28
+ last five), and the default pair keeps the sentence instead of the configuration hint.
29
+ - Opt-in public actor updates and explicit human-guidance acceptance messages share durable replay history, with host-origin checks and exact original human words.
30
+ - Conversational ASK_USER policies distinguish indefinite essential questions from 120–300 second clarifications with predeclared safe fallbacks. Fresh question keys, strict server cutoffs, durable outcomes, retained late replies and pause/restart behavior reuse the existing due-wait indexes.
31
+ - Participant-checked live entity-visit corrections use the existing durable sidecar and fresh attributed recall before the next actor reasoning boundary.
32
+ - The package agent skill documents these question and guidance contracts.
33
+ - **A decision is an `LLM_CALL` whose output spec says `modality: "decision"`** (`integrations/abstractcore/llm_client.py`, `effect_handlers.py`). Payload `{"prompt": <state>, "output": {"modality": "decision", "questions": {...}, "truncate"?, "model"?}}`; the result is the usual normalized shape plus `decision` (the System One body: `model`, `answers`, `usage`, `latency_ms`[, `truncated`]) and `answers` (= `decision.answers`), with `content` the answers as JSON, `outputs`/`resources` empty and `provider`/`model` the decision model that answered. No artifact, no store, no `generated_media` tag; the resolved action id is `decision`. Local: the resolved spec (the `output.decision` capability default, or the spec's own route) reaches `generate(prompt, output=[spec])` and core runs it through its decision pool on any text provider; the pooled client serves a decision-only request on the capability host without building the text model. Remote: `POST {core}/v1/decisions` with `model` = `provider/model`, `state`, `questions`, `truncate`; the server's body maps to the same result.
34
+ - **`decide`: a calibrated decision as a durable child run and a VisualFlow node** (`integrations/abstractcore/run_facade.py`, `visualflow_compiler/visual/executor.py`, `visualflow_compiler/compiler.py`). `run_facade.decide(run_id, state=..., questions=..., model=None, truncate=None)` starts a child `LLM_CALL` whose output spec is `{"modality": "decision", "questions": ...}` (plus `truncate` and `model` when given); a `model` written as `provider/model` (`mlx/jaredpalmer/kev-4b`) travels whole and AbstractCore splits it. The `decide` VisualFlow node asks one typed question (inputs `state`, `question`, `question_type` = `choice` | `noul` | `score`, `options` / `levels`, `provider`, `model`, `truncate`) and fills that type's output pins (`answer`, then `choice`/`confidence`/`probabilities`, `noul`/`verdict`, or `score`/`level`/`confidence`/`probabilities`, plus `model`, `success`); a wired `questions` object asks several System One questions at once and fills `answers`. It lowers to the same `LLM_CALL`; the result sync also carries `decision` (the System One body), `content` and `meta` (`abstractflow.decide.v1.meta`).
35
+ - **A local model's loaded context, through the config facade** (`integrations/abstractcore/config_facade.py`).
36
+ `configured_model_context(provider, model)` and `set_model_context(provider, model, tokens)` read and set the
37
+ per-model context AbstractCore loads a model with (AbstractCore ADR 0010 point 8: a set context is a pin, loaded
38
+ as is or refused, never shrunk). The gateway's Resources page "Set context" calls them instead of importing
39
+ AbstractCore. On a Core without `abstractcore.config.model_contexts` (every release up to 2.31.1) they raise
40
+ `AbstractCoreTooOld` naming what is missing.
41
+ - Tool approval waits can carry optional `details.public_action` (`text`, `update_id`, `run_id`,
42
+ `iteration`, `call_ids`) supplied by an actor adapter alongside its proposed effect batch.
43
+ Runtime validates its owning run and exact call identities, narrows it to the actual gated
44
+ subset, and withholds mismatched or private-fenced context. The canonical replay preserves
45
+ this public explanation; approval decisions and policies are unchanged.
46
+ - Hosts can start Core's independently authenticated HTTP listener through a lazy Runtime lifecycle facade; unused server dependencies stay unloaded.
47
+
48
+ ### Changed
49
+
50
+ - **Changelog entries are fragments** (`changelog.d/`, `scripts/changelog.py`). A pull request adds
51
+ `changelog.d/<pr-or-slug>.md` instead of editing `CHANGELOG.md`'s `[Unreleased]` section, which conflicted on every
52
+ merge of main; the release assembles the fragments (`python scripts/changelog.py assemble X.Y.Z`) and CI fails a pull
53
+ request that changes `src/` without one.
54
+ - **AbstractCore floor `>=2.32.0`** (`pyproject.toml`, `integrations/abstractcore/output_specs.py`): the `decision` output modality (`output.decision` route, `/v1/decisions`, `MultimodalGenerateResponse.decision`, `output_has_generated_media` False for it).
55
+ - **Voice transport is not a conversation attachment** (`history_bundle.py`, `conversation_search.py`). A session turn in
56
+ a history bundle no longer lists the recording of a spoken question or the read-aloud audio of an answer among its
57
+ `attachments` and `artifacts`; `is_voice_transport(tags)` recognizes them (`purpose` `voice_playback` or
58
+ `voice_dictation`, `artifact_space` `voice`, a `voice/` or `client:voice/` path). The bundle's own `artifacts`
59
+ section still lists every artifact. Clients that showed voice recordings as turn attachments stop doing so.
60
+
61
+ ### Fixed
62
+
63
+ - **A console change to a non-text default no longer reloads the text model, and a runtime never
64
+ leaves a dropped copy resident.** Found on the Linux test server (two accounts, a 9B GGUF):
65
+ changing the embedding default evicted the admin runtime's whole text pool; the boot-warmed copy
66
+ was dropped, its eject skipped because both accounts' runtimes named the same default, and the
67
+ copy stayed in memory with no pool holding it ("resident ~5.4 GiB + 8.3 GiB cache ... still in
68
+ use by runtime client 70a5b844f350, runtime client 70a72f833890; not ejected"), with nothing
69
+ running. Now: (1) a capability-only refresh keeps every pooled text client and hands it the new
70
+ routes in place (a move of the `input.text` route itself still rebuilds); (2) a configured default
71
+ the client has not built is no longer a residency claim (a loaded one is its `pool` claim, one
72
+ loading is `building`); (3) when another runtime really keeps its own copy, the dropping runtime
73
+ still unloads its OWN HuggingFace copy (`released_own_copies`; MLX shares weights and is left to
74
+ the process-wide eject); (4) holders are named in words: `MultiLocalAbstractCoreLLMClient
75
+ .residency_owner_label` (hosts set it; the gateway: "the runtime of account default/bob"), claims
76
+ carry `owner_label`, residency records carry `held_by`, and the skip reason reads "the runtime of
77
+ account default/bob (loaded) still uses it". HuggingFace process rows also carry the loaded
78
+ `context_length` and `kv_cache_bytes` (AbstractCore 2.31.1).
79
+ - **A standalone `LocalAbstractCoreLLMClient` claims the model it holds** (ROOT backlog 0897): another
80
+ client's default switch or a server unload no longer ejects weights it still uses (its next call
81
+ silently reloaded them). A pool unregisters the clients it adopts (its own claims cover them).
82
+ A dropped HuggingFace copy is never lent to another request again, a copy a call just started on
83
+ is freed when that call ends, and one waiter per model frees every copy a later switch drops.
84
+ - Conversational answer and retained-reply replay preserves original human whitespace and the actual question generation identity, including after another question has opened.
85
+ - Completed flows with an explicit structured `result` and no prose now retain a final JSON message in replay. Generic agent envelopes are not serialized; internal-bearing results are withheld from the public projection while their technical run output remains available.
86
+ - **A pin expression that is a single bare word explains how to pass text** (`visualflow_compiler/visual/pin_expressions.py`).
87
+ `hello` is read as a Python name; its `NameError` now says to write `'hello'` with quotes or to set the pin's value
88
+ instead of an expression.
89
+ - **The residency listing carries the model's slot pool** (`integrations/abstractcore/llm_client.py`, core ADR 0011, OVH 8080 pass four). A GGUF row now carries `slots`, `slots_max`, `active`, `queued`, `copies`, `slot_bytes`, `shared_weights` and `slot_refusal_reason`, folded from Core's process row. Before, only the gateway's `/host/state` showed them, so the Resources table could not say that requests were waiting, or why another slot is not built. A row whose holders share one weights instance no longer says "each a full copy of the weights".
90
+ - Structured generation carries JSON schemas across execution-client boundaries and creates validators where inference runs, preserving nested validation and defaults without serializing Python classes. Remote Core calls forward their structured response format and explicitly refuse Python validator classes that cannot cross HTTP. Local explicit validator classes remain supported. Request serialization failures are not retried, and execution diagnostics include the actual ledger step identity.
91
+
10
92
  ## [0.15.3] - 2026-10-29
11
93
 
12
94
  ### Fixed
@@ -81,7 +81,8 @@ When behavior changes, update:
81
81
  - `docs/api.md` (public API surface + imports)
82
82
  - `docs/getting-started.md` (onboarding examples)
83
83
  - `docs/architecture.md` (semantics/invariants)
84
- - `CHANGELOG.md` (user-visible changes)
84
+ - a changelog fragment, `changelog.d/<pr-or-slug>.md` (user-visible changes; never an edit of
85
+ `CHANGELOG.md`: [changelog.d/README.md](changelog.d/README.md), checked by CI)
85
86
 
86
87
  List every `docs/*.md` page in `docs/README.md`. Keep `llms.txt` (the hand-curated index) and
87
88
  `llms-full.txt` in step with the documentation in the same change. `llms-full.txt` is generated:
@@ -92,4 +93,5 @@ is stale). Add a page to the script's `DOCUMENTS` list when it joins the core se
92
93
  ## Releases
93
94
 
94
95
  - Bump `version` in `pyproject.toml`
95
- - Add a dated section to `CHANGELOG.md` (Keep a Changelog format)
96
+ - Assemble the changelog: `python scripts/changelog.py assemble X.Y.Z` (the dated section from
97
+ `changelog.d/`, fragments deleted)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: AbstractRuntime
3
- Version: 0.15.3
3
+ Version: 0.16.0
4
4
  Summary: AbstractRuntime: a durable graph runner designed to pair with AbstractCore.
5
5
  Project-URL: AbstractCore (website), https://www.abstractcore.ai/
6
6
  Project-URL: AbstractRuntime (GitHub), https://github.com/lpalbou/abstractruntime
@@ -20,7 +20,7 @@ Classifier: Programming Language :: Python :: 3.11
20
20
  Classifier: Programming Language :: Python :: 3.12
21
21
  Classifier: Programming Language :: Python :: 3.13
22
22
  Requires-Python: >=3.10
23
- Requires-Dist: abstractcore>=2.30.0
23
+ Requires-Dist: abstractcore>=2.32.0
24
24
  Requires-Dist: abstractmemory>=0.4.0
25
25
  Requires-Dist: abstractsemantics>=0.0.5
26
26
  Requires-Dist: anyio<5.0.0,>=4.12.1
@@ -35,14 +35,14 @@ Requires-Dist: reportlab<5.0.0,>=4.0.0
35
35
  Requires-Dist: restrictedpython>=7.0
36
36
  Requires-Dist: unstructured[docx,odt,pptx,rtf,xlsx]<0.19.0,>=0.18.32
37
37
  Provides-Extra: apple
38
- Requires-Dist: abstractcore[apple]>=2.30.0; extra == 'apple'
38
+ Requires-Dist: abstractcore[apple]>=2.32.0; extra == 'apple'
39
39
  Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'apple'
40
40
  Provides-Extra: docs
41
41
  Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
42
42
  Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
43
43
  Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
44
44
  Provides-Extra: gpu
45
- Requires-Dist: abstractcore[gpu]>=2.30.0; extra == 'gpu'
45
+ Requires-Dist: abstractcore[gpu]>=2.32.0; extra == 'gpu'
46
46
  Requires-Dist: setuptools<82.0.0,>=77.0.3; extra == 'gpu'
47
47
  Provides-Extra: test
48
48
  Requires-Dist: aiosmtpd<2.0.0,>=1.4.4; extra == 'test'
@@ -55,10 +55,27 @@ 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.3 • **Python:** 3.10+
58
+ **Version:** 0.16.0 • **Python:** 3.10+
59
59
 
60
60
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
61
61
 
62
+ ## What's new in 0.16.0
63
+
64
+ - **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
65
+ (`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
66
+ durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
67
+ 2.32.0. See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
68
+ - **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
69
+ clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
70
+ words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
71
+ - **Model residency in words**: fit refusals are never retried and keep their typed fields on the ledger, residency
72
+ rows carry the slot pool (`slots`, `active`, `queued`, ...) and name who holds a model, and the config facade reads
73
+ and sets a local model's loaded context (`configured_model_context`, `set_model_context`).
74
+ - **Structured output across process boundaries**: JSON schemas travel as data and validators are built where
75
+ inference runs, for local, remote and hybrid clients alike.
76
+ - **Voice transport is not a turn attachment** in history bundles and conversation search. Full list:
77
+ [CHANGELOG.md](CHANGELOG.md#0160---2026-11-02).
78
+
62
79
  ## What's new in 0.15.3
63
80
 
64
81
  - **A run-store index build no longer announces its journal replay as changes**: a plain read (`list_run_index`,
@@ -128,8 +145,8 @@ Remote-light runtime:
128
145
  pip install abstractruntime
129
146
  ```
130
147
 
131
- The base install includes AbstractCore 2.30.0 or newer (its light install:
132
- remote providers, tools, vision, voice, audio, and music integration), plus the
148
+ The base install includes AbstractCore 2.32.0 or newer (its light install:
149
+ remote providers, tools, vision, voice, audio, music, and decision integration), plus the
133
150
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
134
151
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
135
152
  sentence-transformer embeddings are not selected unless you choose a hardware
@@ -238,7 +255,7 @@ Drivers + distribution:
238
255
  - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
239
256
 
240
257
  Runtime-owned integrations:
241
- - AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
258
+ - AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, calibrated decisions (`decide`), host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
242
259
  - AbstractCore models and engines for hosts: `config_facade` passes through the host profile, local-engine status and installs, the model catalog with fit verdicts, installed models, deletes, host jobs (with who-cancelled attribution) and the embeddable console screens: `docs/integrations/abstractcore.md#models-engines-and-host-jobs-config-facade`
243
260
  - For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
244
261
  - AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
@@ -274,6 +291,14 @@ sr = create_scheduled_runtime(
274
291
  )
275
292
  ```
276
293
 
294
+ ## For AI agents
295
+
296
+ Register and use the [`abstractruntime` agent skill](https://github.com/lpalbou/AbstractRuntime/tree/main/skills/abstractruntime)
297
+ to operate durable workflows, waits, storage and AbstractCore integration. Copy
298
+ `skills/abstractruntime/` from the checkout matching your package version into
299
+ your agent's skills directory. Start with its install verification, then use the
300
+ linked documentation for the installed version.
301
+
277
302
  ## Documentation
278
303
 
279
304
  | Document | Description |
@@ -4,10 +4,27 @@
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.3 • **Python:** 3.10+
7
+ **Version:** 0.16.0 • **Python:** 3.10+
8
8
 
9
9
  **Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
10
10
 
11
+ ## What's new in 0.16.0
12
+
13
+ - **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
14
+ (`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
15
+ durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
16
+ 2.32.0. See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
17
+ - **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
18
+ clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
19
+ words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
20
+ - **Model residency in words**: fit refusals are never retried and keep their typed fields on the ledger, residency
21
+ rows carry the slot pool (`slots`, `active`, `queued`, ...) and name who holds a model, and the config facade reads
22
+ and sets a local model's loaded context (`configured_model_context`, `set_model_context`).
23
+ - **Structured output across process boundaries**: JSON schemas travel as data and validators are built where
24
+ inference runs, for local, remote and hybrid clients alike.
25
+ - **Voice transport is not a turn attachment** in history bundles and conversation search. Full list:
26
+ [CHANGELOG.md](CHANGELOG.md#0160---2026-11-02).
27
+
11
28
  ## What's new in 0.15.3
12
29
 
13
30
  - **A run-store index build no longer announces its journal replay as changes**: a plain read (`list_run_index`,
@@ -77,8 +94,8 @@ Remote-light runtime:
77
94
  pip install abstractruntime
78
95
  ```
79
96
 
80
- The base install includes AbstractCore 2.30.0 or newer (its light install:
81
- remote providers, tools, vision, voice, audio, and music integration), plus the
97
+ The base install includes AbstractCore 2.32.0 or newer (its light install:
98
+ remote providers, tools, vision, voice, audio, music, and decision integration), plus the
82
99
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
83
100
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
84
101
  sentence-transformer embeddings are not selected unless you choose a hardware
@@ -187,7 +204,7 @@ Drivers + distribution:
187
204
  - run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
188
205
 
189
206
  Runtime-owned integrations:
190
- - AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
207
+ - AbstractCore (LLM + tools, `MODEL_RESIDENCY` with residency locks and context estimates, public discovery/host/run facades, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, local-only prompt-cache export/import admin, durable bloc prompt-cache controls, bindings, lifecycle operations, generated image/video/voice/music outputs with progress events, calibrated decisions (`decide`), host email helpers, Telegram host wrappers, and tool approval waits): `docs/integrations/abstractcore.md`
191
208
  - AbstractCore models and engines for hosts: `config_facade` passes through the host profile, local-engine status and installs, the model catalog with fit verdicts, installed models, deletes, host jobs (with who-cancelled attribution) and the embeddable console screens: `docs/integrations/abstractcore.md#models-engines-and-host-jobs-config-facade`
192
209
  - For outbound comms, use the durable run facade when the send belongs to a run: `get_abstractcore_run_facade(...).send_email(...)` / `send_telegram_message(...)`. If that child run pauses for approval or passthrough execution, resume it through `resume_tool_calls(...)`. Direct host-facade send helpers and the standalone email comms facade remain host-local and nondurable.
193
210
  - AbstractMemory TripleStore integration for `MEMORY_KG_*` effects. Runtime
@@ -223,6 +240,14 @@ sr = create_scheduled_runtime(
223
240
  )
224
241
  ```
225
242
 
243
+ ## For AI agents
244
+
245
+ Register and use the [`abstractruntime` agent skill](https://github.com/lpalbou/AbstractRuntime/tree/main/skills/abstractruntime)
246
+ to operate durable workflows, waits, storage and AbstractCore integration. Copy
247
+ `skills/abstractruntime/` from the checkout matching your package version into
248
+ your agent's skills directory. Start with its install verification, then use the
249
+ linked documentation for the installed version.
250
+
226
251
  ## Documentation
227
252
 
228
253
  | Document | Description |
@@ -0,0 +1,21 @@
1
+ # Changelog fragments
2
+
3
+ Each pull request that changes `src/` adds ONE file here instead of editing `CHANGELOG.md`:
4
+ `changelog.d/<pr-number-or-slug>.md` (for example `changelog.d/123.md` or `changelog.d/a-short-slug.md`). A new file never
5
+ conflicts with another branch; the `[Unreleased]` section did on every merge.
6
+
7
+ A fragment is Keep a Changelog markdown: one or more of `### Added`, `### Changed`, `### Deprecated`,
8
+ `### Removed`, `### Fixed`, `### Security`, each followed by its entries, written as before:
9
+
10
+ ```markdown
11
+ ### Fixed
12
+
13
+ - **A stop signal is what a reader needs** (`module.py`). What was wrong, what is true now,
14
+ and how to use it ...
15
+ ```
16
+
17
+ - CI (`changelog` job): a pull request that changes `src/` without adding a fragment fails, and so does a
18
+ malformed fragment. `python scripts/changelog.py check` runs the same check locally.
19
+ - `python scripts/changelog.py preview` prints what the next release section will say.
20
+ - Release: `python scripts/changelog.py assemble X.Y.Z` writes `## [X.Y.Z] - <date>` from every fragment
21
+ (sections in Keep a Changelog order) and deletes the fragments; commit that with the version bump.
@@ -23,10 +23,14 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
23
23
 
24
24
  ## Guides
25
25
 
26
+ - [AbstractRuntime agent skill](../skills/abstractruntime/SKILL.md) — a self-contained operating guide for agents using workflows, durable waits, stores and AbstractCore execution
27
+ - [Structured responses](integrations/abstractcore.md#structured-responses) — JSON schemas across execution boundaries, local and remote validation, and streaming behavior
28
+ - [Host-managed serving](integrations/abstractcore.md#host-managed-serving) — optional Core-owned HTTP lifecycle and host-admitted ASGI requests
29
+
26
30
  - `faq.md` — common questions (recommended)
27
31
  - `manual_testing.md` — manual smoke tests and how to run the test suite
28
32
  - `artifacts.md` — Runtime artifact identity, descriptors, provenance, catalog search, and access stats
29
- - `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, the `config_facade` models/engines/host-jobs passthroughs for hosts, the `structured_facade` response_format check for hosts, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, model-residency listings, locks and model switching, live token streaming, workspace-scoped tools, durable bloc prompt-cache control, media inputs, generated media outputs, video progress events, and tool approval waits via AbstractCore
33
+ - `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, the `config_facade` models/engines/host-jobs passthroughs for hosts, the `structured_facade` response_format check for hosts, cached sessions with per-session prompt-cache listing/clearing, host memory snapshots, model-residency listings, locks and model switching, live token streaming, workspace-scoped tools, durable bloc prompt-cache control, media inputs, generated media outputs, calibrated decisions (`output.modality: "decision"`, `run_facade.decide`, the `decide` node), video progress events, and tool approval waits via AbstractCore
30
34
  - `integrations/abstractmemory.md` — the AbstractMemory memory facade (ADR 0011): open a mind, stamp provenance from the step context, reconstruct a source from the ledger (`get_record`), history and revisions, and the `MEMORY_REVISE` effect / `memory_revise` node
31
35
  - `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
32
36
  - `email.md` — email for each user: run-scoped account binding and the host resolver, sending without asking (self and pre-authorised recipients), the durable event inbox and mail feeder, the `email.received@1` trigger on the primary or any other mailbox of the user, mail verbs for flows (changes and sends only on a Read and write mailbox: `email_mailbox_read_only`, `email_mailbox_cannot_send`), and the send-email action
@@ -71,7 +71,7 @@ Implementation: `src/abstractruntime/core/runtime.py`.
71
71
  - optional `step_gate()` is consulted at every step boundary; when it returns `False` the tick returns the persisted state and the run stays `RUNNING` (a later tick continues where it stopped)
72
72
  - `Runtime.resume(workflow, run_id, wait_key, payload, max_steps=...) -> RunState`
73
73
  - validates the `wait_key`, writes `payload` to `WaitState.result_key` (if set), and continues from `WaitState.resume_to_node`
74
- - a wait is resumed at most once: a resume of a run that is no longer waiting, or that waits on another key, raises `StaleResumeError` (a `ValueError`), for example when another caller resumed it first
74
+ - a wait is resumed at most once: a resume of a run that is no longer waiting, or that waits on another key, raises `StaleResumeError` (a `ValueError`); replies to recognized conversational questions are instead retained without answering or resuming another question (below)
75
75
  - the check and the commit run under a per-run lock, and tools approved with `{"approved": true}` execute while that lock is held, so a long tool delays a competing resume of the same run, which is then refused
76
76
  - `run_mutation_lock(run_id)` (package root): the per-run, per-process, re-entrant lock that `tick` holds for the whole tick and `resume` for its commit; take it around your own read-modify-save of a run so a tick cannot overwrite your change
77
77
  - `Runtime.get_state(run_id) -> RunState` and `Runtime.get_ledger(run_id) -> list[dict]`
@@ -89,6 +89,95 @@ Effect cancellation helpers (`src/abstractruntime/core/effect_cancellation.py`):
89
89
  - `request_model_effects_cancel(provider, model, cancelled_by="model_eject")` stops the effects using a model before it is unloaded; local `unload_model_residency` calls it for you
90
90
  - `kill_inflight_effect(step_id, killed_by=...)` is an in-process hard stop for a call that ignores its cancel event (it cannot interrupt a thread blocked inside one native call)
91
91
 
92
+ ### Conversational questions and deadlines
93
+
94
+ `ASK_USER` retains its indefinite legacy behavior when `payload.question` is absent.
95
+ For a conversational question, add exactly one of these policies alongside the existing
96
+ `prompt`, `choices` and `allow_free_text` fields:
97
+
98
+ ```json
99
+ {"importance": "essential"}
100
+ ```
101
+
102
+ ```json
103
+ {"importance": "clarification", "timeout_s": 120, "fallback": "Compare both options before choosing."}
104
+ ```
105
+
106
+ Essential questions have no deadline or fallback. Clarifications require a numeric duration
107
+ from 120 through 300 seconds and a nonempty, predeclared safe fallback. Extra policy fields
108
+ are refused. Time passing never grants tool approval or permission to perform an action.
109
+ Flows may supply the same object through the AskUser `question` input or `effectConfig.question`.
110
+
111
+ Every logical issuance has a fresh `wait_key` (`question:<id>`). Its persisted
112
+ `waiting.details.question` contains `id`, `purpose: "conversation"`, `importance`,
113
+ `published_at`, `deadline` and `fallback` (the last two are null for essential questions).
114
+ The existing `waiting.prompt` remains the question text. Resume with the exact key and
115
+ `{"response": "the person's words"}`. Empty responses and approval payloads are refused.
116
+
117
+ The server arbitrates at commit time: a response before the deadline wins; at or after it,
118
+ expiry wins even if the due scan has not run. An answer result carries
119
+ `question: {id, outcome: "answered"}`. Expiry produces
120
+ `{timed_out: true, fallback: "...", question: {id, outcome: "expired"}}` with no `response`.
121
+ Hosts and actors must present this as a host-authored continuation, never as human speech.
122
+ Cancellation records a `cancelled` outcome and does not continue the workflow.
123
+
124
+ Explicit pause suppresses timeout continuation. The original deadline survives pause and
125
+ restart; after explicit resume, an overdue question resolves before further work. A reply to
126
+ a paused, expired or already resolved recognized question is retained in the ledger, with
127
+ its reason, and does not answer a newer question. The small outcome index retains 64 entries;
128
+ full outcomes and retained replies remain in the ledger. Outcome receipts are authoritative
129
+ across a crash before the following checkpoint save.
130
+
131
+ Memory, JSON and SQLite run stores index these USER deadlines through their existing due-wait
132
+ queries. The existing scheduler/host runner advances them; Runtime does not install a timer
133
+ service. Resolution uses process-local locks and the existing single-writer authority for
134
+ the store; it is not a distributed multi-writer transaction. Legacy EVENT deadlines and
135
+ tool-approval waits retain their own contracts.
136
+
137
+ ### Public conversation and accepted guidance
138
+
139
+ An opt-in actor may inherit `_runtime.conversation: {enabled: true}` through native child
140
+ workflows and VisualFlow Agent nodes. This flag does not create an extra inference call.
141
+ Public updates enter replay only through an explicit completed `EMIT_EVENT` named
142
+ `public_update`, with payload `id`, `text`, `run_id`, optional `session_id`, `iteration` and
143
+ `source_call_ids`. The event's owner must match `run_id`; private diary/thinking fences are
144
+ excluded. See [replay.md](replay.md#public-conversation-messages).
145
+
146
+ Actors may attach `public_action` to a proposed `TOOL_CALLS` payload with `text`,
147
+ `update_id`, `run_id`, positive integer `iteration` and `call_ids`. The text is the
148
+ actor's public stated purpose (nonblank, at most 600 characters), not execution
149
+ proof. The adapter owns its binding to an accepted public update and unchanged
150
+ proposed calls. Runtime checks the owning run and exact effect call IDs, then
151
+ narrows the metadata to the actual calls requiring approval. Mismatched targets,
152
+ unknown or duplicate IDs, malformed metadata and private fences withhold the
153
+ explanation without changing the approval policy. Valid context appears at
154
+ `waiting.details.public_action` and the canonical replay interaction's `details`.
155
+ Clients verify its run and exact pending IDs before presenting it. An absent
156
+ explanation must not be replaced with private reasoning or a guessed purpose.
157
+ Hosts with an earlier approval boundary can share
158
+ `abstractruntime.integrations.abstractcore.effect_handlers.approval_public_action(run, payload, host_calls, waiting_calls)`.
159
+ Pass the original effect payload and host calls plus the exact gated subset. The return
160
+ value is validated narrowed metadata or `None`; compute it before replacing a delegated
161
+ payload's `tool_calls`, and carry only that returned context forward. This helper grants
162
+ no permission and changes no approval policy.
163
+
164
+ For human input during work, `Runtime.steer(run_id, message, display_text=words, speaker=...)`
165
+ keeps the existing durable guidance path and adds a public acceptance receipt only when
166
+ `display_text` is explicitly supplied. `message` may contain quoted context; `display_text`
167
+ preserves the person's exact original words (nonblank, at most 65,536 characters).
168
+ Operational steering without this field does not become public human history.
169
+ Hosts may supply `client_message_id` for correlation; it is preserved on the reserved
170
+ receipt and replay message, independently of the sidecar sequence and message id.
171
+ An accepted receipt means the words were durably queued; the actor's later response is the
172
+ evidence that it considered or adopted them. It does not undo an action already performed.
173
+
174
+ If the sidecar append succeeds and the public-receipt append fails, admission still succeeds:
175
+ the exact words remain in the sidecar and the host logs a repair warning. Delivery repairs
176
+ the receipt before acknowledging that source. A terminal run does not promise another actor
177
+ boundary; its retained sidecar remains recoverable rather than being reported as refused.
178
+ Entity visits use the narrower participant-checked visit door and fresh attributed recall,
179
+ described in [entity-runtime.md](entity-runtime.md#live-visit-corrections).
180
+
92
181
  Tool scope: an explicit `allowed_tools` list in `run.vars["_runtime"]`, in a child run's `_runtime`, or in a `TOOL_CALLS` payload is a ceiling intersected across the run tree (`src/abstractruntime/core/tool_scope.py`). Approval policy can remove a prompt but can never grant a tool outside it; a missing key means unrestricted and an empty list denies every tool.
93
182
 
94
183
  For the execution model (ledger records, effect outcomes, waits), see `architecture.md`.
@@ -187,6 +276,13 @@ Implementation: `src/abstractruntime/core/policy.py`.
187
276
  - `EffectPolicy` protocol and implementations: `DefaultEffectPolicy`, `RetryPolicy`, `NoRetryPolicy`
188
277
  - `compute_idempotency_key(...)` helper
189
278
 
279
+ The AbstractCore runtime factories default to three total LLM attempts and one
280
+ tool attempt, with exponential backoff starting at one second and capped at
281
+ 30 seconds. Supply `effect_policy=NoRetryPolicy()` to disable Runtime retries;
282
+ the provider may have its own retry policy. Deterministic structured-request
283
+ and serialization refusals are nonretryable. Inspect a returned run's status
284
+ and error even when `tick(...)` itself returns normally.
285
+
190
286
  Docs: `architecture.md` (reliability section).
191
287
 
192
288
  ## WorkflowBundles (`.flow`) and VisualFlow distribution
@@ -201,8 +297,8 @@ VisualFlow compiler helpers are available from `abstractruntime.visualflow_compi
201
297
  - `compile_visualflow(...)` and `compile_visualflow_tree(...)` compile VisualFlow JSON into executable `WorkflowSpec` objects.
202
298
 
203
299
  VisualFlow authoring note (media and document nodes):
204
- - Runtime recognizes first-class VisualFlow media nodes such as `generate_image`, `edit_image`, `image_to_image`, `upscale_image`, `image_upscale`, `generate_video`, `text_to_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, and `listen_voice`.
205
- - Generated-media and transcription nodes lower to a durable `EffectType.LLM_CALL` with an `output` selector (for example `{"modality":"music","task":"music_generation"}`), while `listen_voice` lowers to `WAIT_EVENT`. Hosts should persist the authoring node type rather than pre-lowering to `llm_call`.
300
+ - Runtime recognizes first-class VisualFlow media nodes such as `generate_image`, `edit_image`, `image_to_image`, `upscale_image`, `image_upscale`, `generate_video`, `text_to_video`, `image_to_video`, `generate_voice`, `generate_music`, `decide`, `transcribe_audio`, and `listen_voice`.
301
+ - Generated-media and transcription nodes lower to a durable `EffectType.LLM_CALL` with an `output` selector (for example `{"modality":"music","task":"music_generation"}`), while `listen_voice` lowers to `WAIT_EVENT`. The `decide` node asks ONE question about a state (inputs `state`, `question`, `question_type` = `choice` | `noul` | `score`, `options` for a choice, `levels` for a score, `provider`, `model`, `truncate`) and fills the typed output pins of that type (`answer` plus `choice`/`confidence`/`probabilities`, `noul`/`verdict`, or `score`/`level`/`confidence`/`probabilities`, with `model` and `success`); a wired `questions` object (several System One questions) replaces the single question and fills `answers`. It lowers to the same `LLM_CALL` with `{"modality":"decision","questions":{...}}` and the state as the prompt; see [decisions](integrations/abstractcore.md#decisions). Hosts should persist the authoring node type rather than pre-lowering to `llm_call`.
206
302
  - Runtime also recognizes file/document nodes. `read_file` and `write_file`
207
303
  handle UTF-8 text/JSON workspace paths. In Gateway-hosted runs, those paths
208
304
  follow the shared canonical contract: `rel/path` for the main workspace root
@@ -332,6 +428,13 @@ This produces a portable record of a run’s state + ledger + artifacts suitable
332
428
  When available, it also includes `resolved_actions`: bounded capability/action summaries derived
333
429
  from Core route resolution and persisted from `LLM_CALL` results.
334
430
 
431
+ Voice transport is never part of a conversation turn: the recording of a spoken question and the
432
+ read-aloud audio synthesized from an answer are left out of each session turn's `attachments` and
433
+ `artifacts`. `is_voice_transport(tags)` (in `abstractruntime.history_bundle`) recognizes them:
434
+ `purpose` `voice_playback` or `voice_dictation`, `artifact_space` `voice`, or a `voice/` or
435
+ `client:voice/` path. The bundle's own `artifacts` section stays complete, and conversation search
436
+ applies the same rule.
437
+
335
438
  ## Replay view (one reconstruction of a run, every client)
336
439
 
337
440
  Implementation: `src/abstractruntime/replay/` (ADR 0010). Guide: [replay.md](replay.md).
@@ -355,7 +458,7 @@ Implementation: `src/abstractruntime/replay/` (ADR 0010). Guide: [replay.md](rep
355
458
 
356
459
  ### AbstractCore (LLM + tools)
357
460
 
358
- Requires: `pip install abstractruntime` (AbstractCore 2.30.0 or newer is part of the base install).
461
+ Requires: `pip install abstractruntime` (AbstractCore 2.32.0 or newer is part of the base install).
359
462
 
360
463
  Implementation: `src/abstractruntime/integrations/abstractcore/*`.
361
464
 
@@ -379,7 +482,7 @@ Entry points:
379
482
  - local `list_model_residency` merges AbstractCore's host-wide loaded-model sweep into text-generation listings (sweep-only rows carry `source: "provider_server"` and no `task` label), and residency rows normalize provider size extras to `size_bytes` / `size_vram_bytes` while keeping the originals; local text rows also carry registry-declared `modalities` (omitted on a registry miss), host identity (`host_id` / `host_name`), and runtime-owned lock truth (`locked` / `lockable`, with `pinned` a truthful alias of `locked` — never the default-identity flag, which `default` alone carries), while remote listings keep the Core server's row identity
380
483
  - host-local prompt-cache export/import admin also lives on the host facade and client delegation layer (`list_prompt_cache_exports`, `prompt_cache_export`, `prompt_cache_import`) and is intentionally local-only
381
484
  - host-facade email helpers (`list_email_accounts`, `list_emails`, `read_email`, `send_email`) use the process's own AbstractCore account (single-user installs)
382
- - run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `upscale_image`, `generate_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, `send_email`, `send_telegram_message`)
485
+ - run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `upscale_image`, `generate_video`, `image_to_video`, `generate_voice`, `generate_music`, `decide`, `transcribe_audio`, `send_email`, `send_telegram_message`)
383
486
  - task-specific image/video helpers preserve batch and adapter controls such as
384
487
  `count`/`n`, `seeds`, ordered `lora_adapters`, and video `flow_shift`; local
385
488
  subprocess isolation stays within the same public contract.
@@ -396,15 +499,17 @@ Execution controls and cancellation:
396
499
  - `media`: a media path, artifact ref (`{"$artifact": "..."}` or `{"artifact_id": "..."}`), media dict, or list of those
397
500
  - `output`: AbstractCore output selector; top-level `outputs` is accepted as a runtime alias
398
501
  - `params`: provider/model routing, generation controls, prompt-cache keys or `prompt_cache_binding`, structured-output schema options, and tracing metadata
502
+ - `response_schema` / `response_schema_name`: JSON schema data and name for a structured result at `result.data`; local execution creates the validator at the provider boundary. Structured calls do not stream tokens. Remote/hybrid clients forward an OpenAI JSON-schema response format; Python validator classes cannot cross HTTP. See [structured responses](integrations/abstractcore.md#structured-responses).
399
503
 
400
504
  Multimodal support:
401
505
  - common remote-light AbstractCore media, vision, voice, audio, and music dependencies are part of the base Runtime install
402
506
  - local clients call AbstractCore's unified `generate(..., media=..., output=...)`
403
- - remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, image edits, image upscaling, text-to-video, image-to-video, speech, music generation, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
507
+ - remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, image edits, image upscaling, text-to-video, image-to-video, speech, music generation, transcription, and decision (`POST /v1/decisions`) endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
404
508
  - remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
405
509
  - generated image/video/voice/music/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
510
+ - a decision (`output: {"modality": "decision", "questions": {...}}`, the state as the prompt) is typed answers, not bytes: no `ArtifactStore` is needed, and the result carries `content` (the answers as JSON), `decision` (`model`, `answers`, `usage`, `latency_ms`, optional `truncated`), `answers`, and the `provider` / `model` of the decision model; the resolved action id is `decision`. Without a `model` the call uses the `output.decision` capability default, so a text runtime on any provider can answer decisions once that default is set (see [decisions](integrations/abstractcore.md#decisions))
406
511
  - streamed TTS playback artifacts carry `purpose=voice_playback`, `artifact_space=voice` and a logical `voice/tts-<id>.wav` path in their tags; hosts can separate read-aloud recordings from user attachments while retaining their artifact refs and provenance
407
- - with the pooled local client (`MultiLocalAbstractCoreLLMClient`), a request whose outputs are all non-text (image, video, voice, music, transcription) and that carries no tools never builds the text client: it runs on AbstractCore's capability host (`CapabilityHostProvider`, no text model), and so does streaming TTS. A text default that cannot be built (an engine not installed) therefore never blocks speech or image generation
512
+ - with the pooled local client (`MultiLocalAbstractCoreLLMClient`), a request whose outputs are all non-text (image, video, voice, music, transcription, decision) and that carries no tools never builds the text client: it runs on AbstractCore's capability host (`CapabilityHostProvider`, no text model), and so does streaming TTS. A text default that cannot be built (an engine not installed) therefore never blocks speech or image generation
408
513
  - media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
409
514
  - local image/video generation runs in a one-shot subprocess (`execution_mode="local_one_shot_subprocess"`) unless every requested media model is resident (explicitly loaded with `load_model_residency`), in which case it runs in-process on the loaded pipeline (`execution_mode="resident_in_process"`, `resident_load_ids`)
410
515
  - a media spec whose `provider` is an endpoint profile (`endpoint:<id>`) never uses the one-shot subprocess: it is an HTTP call to that endpoint, and the host's endpoint-profile resolver (`set_provider_endpoint_profile_resolver`) exists only in this process
@@ -416,7 +521,7 @@ Prompt cache / cached sessions:
416
521
  - LLM clients expose cache control methods listed above for host-side preparation and inspection
417
522
  - `LLM_CALL.params.prompt_cache_key` selects a cache key for a call; runtime can also derive a session-scoped key from `run.vars["_runtime"]["prompt_cache"]` or the Runtime-owned `ABSTRACTRUNTIME_PROMPT_CACHE` process default
418
523
  - `LLM_CALL.params.prompt_cache_binding` is the durable exact-reuse input for bloc-backed prompt caching; if a binding includes `key`, Runtime adopts it as the effective prompt-cache key and refuses mismatches before provider execution
419
- - Runtime only auto-derives session prompt-cache keys for text/chat calls; non-text output selectors such as image, voice, music, and transcription keep explicit `prompt_cache_binding` support but do not receive an inferred cache key
524
+ - Runtime only auto-derives session prompt-cache keys for text/chat calls; non-text output selectors such as image, voice, music, decision, and transcription keep explicit `prompt_cache_binding` support but do not receive an inferred cache key
420
525
  - when Runtime injects the derived session key, the client stamps session attribution (`session_id`, `run_id`, `workflow_id`, `node_id`, `namespace`) into the cache entry's metadata after each generate; caller-supplied `prompt_cache_key`s and binding keys are never stamped, so session-scoped clearing cannot destroy caches shared across sessions
421
526
  - `get_abstractcore_host_facade(...)` exposes `get_memory_snapshot()`, `list_session_prompt_caches(session_id=None)`, and `clear_session_prompt_caches(session_id)`; session caches persist until a host clears them, the owning model is unloaded, or the provider evicts them — completing a run does not clear them
422
527
  - `get_abstractcore_host_facade(...)` also exposes durable bloc helpers (`upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`)
@@ -474,6 +579,8 @@ inside an effect handler. Details: [integrations/abstractmemory.md](integrations
474
579
 
475
580
  ### Host ASGI serving
476
581
 
582
+ `abstractruntime.integrations.abstractcore.server_facade.start_core_server(*, host=None, port=None)` starts Core's optional listener in the calling execution process. It returns a Core-owned handle with `url`, `is_running`, `status()` and `stop()`. Core owns configuration, credentials and HTTP request handling; stopping the listener does not unload resident providers. Omitted bind arguments use Core server settings; explicit port `0` selects an ephemeral port. Startup errors raise to the caller. Importing the facade starts nothing. See [host-managed serving](integrations/abstractcore.md#host-managed-serving).
583
+
477
584
  `abstractruntime.integrations.abstractcore.server_facade.serve_core_request(scope, receive, send, *, token: str, allow_unauthenticated: bool = False)` delegates host-admitted ASGI requests with request-scoped Core authentication. See [host-managed serving](integrations/abstractcore.md#host-managed-serving) for network and credential responsibilities.
478
585
 
479
586
  ### Structured-output checks