AbstractRuntime 0.17.0__tar.gz → 0.18.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 (908) hide show
  1. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/CHANGELOG.md +89 -0
  2. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/PKG-INFO +29 -7
  3. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/README.md +25 -3
  4. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/README.md +2 -0
  5. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/api.md +1 -1
  6. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/automations.md +6 -2
  7. abstractruntime-0.18.0/docs/digital-identity.md +184 -0
  8. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/entity-runtime.md +3 -0
  9. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/getting-started.md +1 -1
  10. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/integrations/abstractcore.md +4 -2
  11. abstractruntime-0.18.0/docs/track-record.md +176 -0
  12. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/troubleshooting.md +1 -1
  13. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/llms-full.txt +417 -10
  14. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/llms.txt +4 -2
  15. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/mkdocs.yml +2 -0
  16. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/pyproject.toml +6 -4
  17. abstractruntime-0.18.0/release-notes.md +86 -0
  18. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/scripts/generate_llms_full.py +2 -0
  19. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/skills/abstractruntime/SKILL.md +2 -2
  20. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/run_attribution.py +12 -4
  21. abstractruntime-0.18.0/src/abstractruntime/identity/__init__.py +86 -0
  22. abstractruntime-0.18.0/src/abstractruntime/identity/acquaintances.py +249 -0
  23. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/chat.py +6 -1
  24. abstractruntime-0.18.0/src/abstractruntime/identity/digital_identity.py +854 -0
  25. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/life.py +42 -1
  26. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/prelude.py +28 -1
  27. abstractruntime-0.18.0/src/abstractruntime/identity/track_record.py +735 -0
  28. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/visit_workflow.py +10 -1
  29. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/host_facade.py +28 -0
  30. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/llm_client.py +112 -3
  31. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/output_specs.py +1 -1
  32. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/tool_executor.py +15 -3
  33. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/sqlite.py +31 -2
  34. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/compiler.py +8 -1
  35. abstractruntime-0.18.0/tests/test_digital_identity.py +722 -0
  36. abstractruntime-0.18.0/tests/test_duck_typed_store_session_attribution.py +45 -0
  37. abstractruntime-0.18.0/tests/test_identity_acquaintances.py +181 -0
  38. abstractruntime-0.18.0/tests/test_identity_track_record.py +473 -0
  39. abstractruntime-0.18.0/tests/test_model_idle_unload_relay.py +114 -0
  40. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_model_residency_clean_switch.py +3 -1
  41. abstractruntime-0.18.0/tests/test_model_residency_lock_set.py +85 -0
  42. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_packaging_extras.py +9 -3
  43. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_sqlite_ledger_store.py +3 -1
  44. abstractruntime-0.18.0/tests/test_tool_executor_error_output_detection.py +129 -0
  45. abstractruntime-0.17.0/release-notes.md +0 -46
  46. abstractruntime-0.17.0/src/abstractruntime/identity/__init__.py +0 -17
  47. abstractruntime-0.17.0/tests/test_tool_executor_error_output_detection.py +0 -40
  48. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/.github/workflows/changelog.yml +0 -0
  49. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/.github/workflows/ci.yml +0 -0
  50. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/.github/workflows/release.yml +0 -0
  51. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/.gitignore +0 -0
  52. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/ACKNOWLEDGMENTS.md +0 -0
  53. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/CODE_OF_CONDUCT.md +0 -0
  54. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/CONTRIBUTING.md +0 -0
  55. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/LICENSE +0 -0
  56. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/ROADMAP.md +0 -0
  57. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/SECURITY.md +0 -0
  58. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/changelog.d/README.md +0 -0
  59. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
  60. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
  61. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
  62. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
  63. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
  64. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
  65. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
  66. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0008_integration_facades_are_the_complete_host_surface.md +0 -0
  67. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0010_one_replay_many_views.md +0 -0
  68. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/0011_memory_facade_is_the_complete_host_surface_for_abstractmemory.md +0 -0
  69. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/adr/README.md +0 -0
  70. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/architecture.md +0 -0
  71. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/artifacts.md +0 -0
  72. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/README.md +0 -0
  73. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/001_runtime_kernel.md +0 -0
  74. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
  75. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
  76. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
  77. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
  78. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
  79. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
  80. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
  81. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/003_wait_primitives.md +0 -0
  82. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
  83. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
  84. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
  85. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
  86. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/004_scheduler_driver.md +0 -0
  87. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
  88. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
  89. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
  90. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/009_artifact_store.md +0 -0
  91. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/010_examples_and_composition.md +0 -0
  92. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/011_subworkflow_support.md +0 -0
  93. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
  94. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
  95. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
  96. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
  97. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
  98. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
  99. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
  100. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
  101. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
  102. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
  103. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
  104. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
  105. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
  106. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
  107. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
  108. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0851_per_account_voice_stores.md +0 -0
  109. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0852_capability_refusals_are_not_retried.md +0 -0
  110. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0855_prefix_stability_contract_of_consecutive_llm_calls.md +0 -0
  111. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0856_memory_facade_and_ledger_provenance.md +0 -0
  112. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0862_is_empty_accepts_lists.md +0 -0
  113. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0863_index_build_never_loses_a_run_created_during_it.md +0 -0
  114. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/completed/0864_facade_catalog_hub_search_pages.md +0 -0
  115. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
  116. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
  117. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
  118. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
  119. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
  120. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
  121. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
  122. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
  123. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/004_tests.md +0 -0
  124. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/005_docs_updates.md +0 -0
  125. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
  126. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
  127. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
  128. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/README.md +0 -0
  129. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
  130. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
  131. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
  132. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
  133. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
  134. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
  135. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
  136. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
  137. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
  138. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
  139. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
  140. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
  141. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
  142. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0853_session_tool_policy_before_the_approval_wait.md +0 -0
  143. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0854_replay_view.md +0 -0
  144. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0857_entity_direct_memory_writes_provenance.md +0 -0
  145. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0858_typed_runs_run_type_stamped_at_start.md +0 -0
  146. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0859_replay_view_ephemeral_text_deltas.md +0 -0
  147. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/0866_queued_state_in_the_ledger_and_pools_lend_never_build.md +0 -0
  148. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
  149. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
  150. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_portability/README.md +0 -0
  151. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
  152. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
  153. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
  154. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
  155. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
  156. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
  157. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
  158. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
  159. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
  160. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
  161. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
  162. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
  163. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
  164. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
  165. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
  166. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
  167. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
  168. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
  169. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
  170. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
  171. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0849_conversation_search_tool_usage_outputs_and_thinking.md +0 -0
  172. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0850_growing_automation_history_out_of_the_controller_ledger.md +0 -0
  173. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0860_replay_view_stop_wording_from_the_ledger.md +0 -0
  174. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0861_replay_view_activity_tool_sandbox_and_call_timings.md +0 -0
  175. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0862_replay_view_message_artifacts_exclude_bookkeeping.md +0 -0
  176. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/0865_model_loaded_ledger_event.md +0 -0
  177. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
  178. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
  179. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
  180. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
  181. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
  182. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
  183. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
  184. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
  185. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
  186. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/email.md +0 -0
  187. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/evidence.md +0 -0
  188. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/faq.md +0 -0
  189. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/integrations/abstractmemory.md +0 -0
  190. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/limits.md +0 -0
  191. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/manual_testing.md +0 -0
  192. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/mcp-worker.md +0 -0
  193. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/proposal.md +0 -0
  194. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/provenance.md +0 -0
  195. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/replay.md +0 -0
  196. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/snapshots.md +0 -0
  197. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/tool-approval.md +0 -0
  198. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/tools-comms.md +0 -0
  199. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/docs/workflow-bundles.md +0 -0
  200. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/01_hello_world.py +0 -0
  201. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/02_ask_user.py +0 -0
  202. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/03_wait_until.py +0 -0
  203. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/04_multi_step.py +0 -0
  204. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/05_persistence.py +0 -0
  205. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/06_llm_integration.py +0 -0
  206. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/07_react_agent.py +0 -0
  207. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/examples/README.md +0 -0
  208. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/pytest.ini +0 -0
  209. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/scripts/backfill_diary_edges.py +0 -0
  210. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/scripts/changelog.py +0 -0
  211. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/scripts/regen_replay_conformance.py +0 -0
  212. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/__init__.py +0 -0
  213. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automation_queries.py +0 -0
  214. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/__init__.py +0 -0
  215. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/adapters.py +0 -0
  216. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/attention.py +0 -0
  217. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/bundle.py +0 -0
  218. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
  219. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
  220. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/commands.py +0 -0
  221. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/consumers.py +0 -0
  222. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/controller.py +0 -0
  223. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/ledger.py +0 -0
  224. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/models.py +0 -0
  225. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/samples.py +0 -0
  226. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/service.py +0 -0
  227. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/automations/wakes.py +0 -0
  228. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/conversation_search.py +0 -0
  229. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/__init__.py +0 -0
  230. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/config.py +0 -0
  231. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/effect_cancellation.py +0 -0
  232. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/event_keys.py +0 -0
  233. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/health.py +0 -0
  234. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/live_deltas.py +0 -0
  235. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/models.py +0 -0
  236. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/policy.py +0 -0
  237. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/progress_channel.py +0 -0
  238. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/publish.py +0 -0
  239. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/questions.py +0 -0
  240. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/run_identity.py +0 -0
  241. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/run_lifecycle.py +0 -0
  242. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/run_origin.py +0 -0
  243. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/runtime.py +0 -0
  244. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/spec.py +0 -0
  245. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/step_context.py +0 -0
  246. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/tool_scope.py +0 -0
  247. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/core/vars.py +0 -0
  248. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/documents/__init__.py +0 -0
  249. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/documents/charts.py +0 -0
  250. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/documents/docx.py +0 -0
  251. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/documents/pdf.py +0 -0
  252. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/__init__.py +0 -0
  253. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/actions.py +0 -0
  254. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/automations.py +0 -0
  255. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/binding.py +0 -0
  256. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/feeder.py +0 -0
  257. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/frame.py +0 -0
  258. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/email/inbox.py +0 -0
  259. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/evidence/__init__.py +0 -0
  260. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/evidence/recorder.py +0 -0
  261. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/history_bundle.py +0 -0
  262. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/act_only.py +0 -0
  263. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/communities.py +0 -0
  264. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/diary.py +0 -0
  265. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/digest.py +0 -0
  266. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/entity_runtime.py +0 -0
  267. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/fingerprint.py +0 -0
  268. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/lease.py +0 -0
  269. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/memory_reader.py +0 -0
  270. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/night_voice.py +0 -0
  271. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/phase_graph.py +0 -0
  272. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/phase_spec.py +0 -0
  273. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/prompt_overlay.py +0 -0
  274. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/reflection.py +0 -0
  275. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
  276. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/substrate.py +0 -0
  277. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/tool_effects.py +0 -0
  278. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/tool_policy.py +0 -0
  279. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/identity/tools.py +0 -0
  280. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/__init__.py +0 -0
  281. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
  282. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
  283. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
  284. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
  285. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
  286. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
  287. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
  288. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
  289. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
  290. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
  291. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
  292. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
  293. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
  294. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
  295. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
  296. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
  297. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
  298. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
  299. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
  300. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
  301. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
  302. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/server_facade.py +0 -0
  303. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
  304. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
  305. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/structured_output.py +0 -0
  306. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
  307. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
  308. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
  309. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
  310. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/voice_facade.py +0 -0
  311. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/voice_library.py +0 -0
  312. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
  313. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
  314. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
  315. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
  316. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
  317. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/memory_facade.py +0 -0
  318. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
  319. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/mail_verbs.py +0 -0
  320. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/__init__.py +0 -0
  321. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/active_context.py +0 -0
  322. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/active_memory.py +0 -0
  323. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/compaction.py +0 -0
  324. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/kg_packets.py +0 -0
  325. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/memact_composer.py +0 -0
  326. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/recall_levels.py +0 -0
  327. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/memory/token_budget.py +0 -0
  328. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/rendering/__init__.py +0 -0
  329. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
  330. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/rendering/json_stringify.py +0 -0
  331. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/__init__.py +0 -0
  332. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/__init__.py +0 -0
  333. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/expected_view.json +0 -0
  334. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/manifest.json +0 -0
  335. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/records.json +0 -0
  336. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/runs.json +0 -0
  337. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/expected_view.json +0 -0
  338. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/manifest.json +0 -0
  339. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/records.json +0 -0
  340. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/a_delegated_child_approval/runs.json +0 -0
  341. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/expected_view.json +0 -0
  342. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/manifest.json +0 -0
  343. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/records.json +0 -0
  344. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/b_timer_without_resume/runs.json +0 -0
  345. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/expected_view.json +0 -0
  346. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/manifest.json +0 -0
  347. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/records.json +0 -0
  348. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/runs.json +0 -0
  349. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/d_cancellation/expected_view.json +0 -0
  350. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/d_cancellation/manifest.json +0 -0
  351. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/d_cancellation/records.json +0 -0
  352. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/d_cancellation/runs.json +0 -0
  353. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/expected_view.json +0 -0
  354. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/manifest.json +0 -0
  355. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/records.json +0 -0
  356. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/runs.json +0 -0
  357. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/expected_view.json +0 -0
  358. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/manifest.json +0 -0
  359. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/records.json +0 -0
  360. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/e_structured_output_agents/runs.json +0 -0
  361. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/f_windowed_slim/expected_view.json +0 -0
  362. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/f_windowed_slim/manifest.json +0 -0
  363. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/f_windowed_slim/records.json +0 -0
  364. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/f_windowed_slim/runs.json +0 -0
  365. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/g_ask_user/expected_view.json +0 -0
  366. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/g_ask_user/manifest.json +0 -0
  367. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/g_ask_user/records.json +0 -0
  368. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/g_ask_user/runs.json +0 -0
  369. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/h_denied_approval/expected_view.json +0 -0
  370. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/h_denied_approval/manifest.json +0 -0
  371. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/h_denied_approval/records.json +0 -0
  372. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/h_denied_approval/runs.json +0 -0
  373. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/i_wait_kinds/expected_view.json +0 -0
  374. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/i_wait_kinds/manifest.json +0 -0
  375. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/i_wait_kinds/records.json +0 -0
  376. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/i_wait_kinds/runs.json +0 -0
  377. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/expected_view.json +0 -0
  378. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/manifest.json +0 -0
  379. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/records.json +0 -0
  380. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/runs.json +0 -0
  381. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/k_nested_delegation/expected_view.json +0 -0
  382. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/k_nested_delegation/manifest.json +0 -0
  383. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/k_nested_delegation/records.json +0 -0
  384. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/k_nested_delegation/runs.json +0 -0
  385. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/expected_view.json +0 -0
  386. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/manifest.json +0 -0
  387. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/records.json +0 -0
  388. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/l_answer_then_completion/runs.json +0 -0
  389. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/expected_view.json +0 -0
  390. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/manifest.json +0 -0
  391. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/records.json +0 -0
  392. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/conformance/m_session_tool_policy/runs.json +0 -0
  393. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/delta.py +0 -0
  394. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/executions.py +0 -0
  395. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/replay/view.py +0 -0
  396. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/__init__.py +0 -0
  397. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/convenience.py +0 -0
  398. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/multi_store.py +0 -0
  399. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/registry.py +0 -0
  400. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/scheduler/scheduler.py +0 -0
  401. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/session_history.py +0 -0
  402. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/session_turns.py +0 -0
  403. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/__init__.py +0 -0
  404. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/artifacts.py +0 -0
  405. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/base.py +0 -0
  406. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/change_ring.py +0 -0
  407. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/commands.py +0 -0
  408. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/in_memory.py +0 -0
  409. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/json_files.py +0 -0
  410. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/lease.py +0 -0
  411. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/ledger_chain.py +0 -0
  412. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/ledger_slim.py +0 -0
  413. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/observable.py +0 -0
  414. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/offloading.py +0 -0
  415. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/serialize.py +0 -0
  416. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/session_tool_policy.py +0 -0
  417. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/snapshots.py +0 -0
  418. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/storage/steer_sidecar.py +0 -0
  419. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/__init__.py +0 -0
  420. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/cloudevents.py +0 -0
  421. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/connection_events.py +0 -0
  422. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/connections.py +0 -0
  423. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/email_received.py +0 -0
  424. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/event_frame.py +0 -0
  425. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/feed.py +0 -0
  426. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/manual.py +0 -0
  427. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/protocol.py +0 -0
  428. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/registry.py +0 -0
  429. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/schedule.py +0 -0
  430. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/triggers/webhook.py +0 -0
  431. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/turn_grounding.py +0 -0
  432. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/utils/__init__.py +0 -0
  433. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/utils/atomic_files.py +0 -0
  434. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/utils/file_filters.py +0 -0
  435. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/utils/workspace_paths.py +0 -0
  436. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
  437. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
  438. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
  439. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
  440. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
  441. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
  442. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
  443. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
  444. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
  445. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
  446. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
  447. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
  448. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
  449. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
  450. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
  451. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
  452. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
  453. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
  454. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
  455. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
  456. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
  457. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
  458. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
  459. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
  460. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
  461. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
  462. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/models.py +0 -0
  463. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/packer.py +0 -0
  464. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/reader.py +0 -0
  465. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/src/abstractruntime/workflow_bundle/registry.py +0 -0
  466. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/README.md +0 -0
  467. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/automation_harness.py +0 -0
  468. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/conftest.py +0 -0
  469. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/email_wp2_support.py +0 -0
  470. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/atom.xml +0 -0
  471. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/rdf-not-a-feed.xml +0 -0
  472. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/rss1-malformed.xml +0 -0
  473. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/rss1.xml +0 -0
  474. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/feeds/rss2.xml +0 -0
  475. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/schedule_v1_corpus.json +0 -0
  476. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/visualflow/compare_text_operands.json +0 -0
  477. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/visualflow/typed_literals_flow.json +0 -0
  478. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/fixtures/visualflow/typed_literals_flow.legacy.json +0 -0
  479. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/live_email/conftest.py +0 -0
  480. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/live_email/live_email_support.py +0 -0
  481. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/live_email/test_email_live_runtime.py +0 -0
  482. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/media_endpoint_profile_probe.py +0 -0
  483. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_comms_facade.py +0 -0
  484. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_discovery_facade.py +0 -0
  485. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_host_facade.py +0 -0
  486. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_run_facade.py +0 -0
  487. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_server_facade.py +0 -0
  488. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_structured_facade.py +0 -0
  489. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_abstractcore_telegram_facade.py +0 -0
  490. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_active_consumers_index.py +0 -0
  491. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_active_context_policy.py +0 -0
  492. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_active_index.py +0 -0
  493. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_active_memory.py +0 -0
  494. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_agora_agent_alias_identity.py +0 -0
  495. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_agora_tools_http.py +0 -0
  496. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_analyze_media_addressing_and_walling.py +0 -0
  497. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_answer_user_effect.py +0 -0
  498. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_artifact_session_candidates.py +0 -0
  499. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_artifacts.py +0 -0
  500. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_calendar_schedule.py +0 -0
  501. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_commands.py +0 -0
  502. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_controller.py +0 -0
  503. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_controller_recovery.py +0 -0
  504. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_definition.py +0 -0
  505. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_discussion_isolation.py +0 -0
  506. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_email_results.py +0 -0
  507. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_growing_context.py +0 -0
  508. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_index.py +0 -0
  509. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_list_reads.py +0 -0
  510. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_named_policy_compiler.py +0 -0
  511. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_next_fire.py +0 -0
  512. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_occurrence_error.py +0 -0
  513. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_occurrence_input_resolver.py +0 -0
  514. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_occurrence_recovery.py +0 -0
  515. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_replay_read_only.py +0 -0
  516. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_retry.py +0 -0
  517. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_session_turns.py +0 -0
  518. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_status.py +0 -0
  519. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_automation_tool_approval.py +0 -0
  520. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_browser_probe_target_walling.py +0 -0
  521. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_budget_law_no_unrequested_caps.py +0 -0
  522. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_capability_default_reasoning.py +0 -0
  523. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_changelog_fragments.py +0 -0
  524. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_chat_summarizer_integration.py +0 -0
  525. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_code_node_imports.py +0 -0
  526. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_code_node_restricted_python.py +0 -0
  527. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_command_sandbox_host_facade.py +0 -0
  528. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_command_store.py +0 -0
  529. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_compaction_helpers.py +0 -0
  530. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_compaction_summarizer_route.py +0 -0
  531. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_config_facade_model_contexts.py +0 -0
  532. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_config_facade_models_engines.py +0 -0
  533. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_config_facade_voice_input_hint.py +0 -0
  534. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_control_adapter_while.py +0 -0
  535. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_controller_bundle_packaged.py +0 -0
  536. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_conversation_search.py +0 -0
  537. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_conversational_questions.py +0 -0
  538. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_crash_ordering_inversions.py +0 -0
  539. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_create_if_absent.py +0 -0
  540. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_data_registry_facade.py +0 -0
  541. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_decision_facade_and_node.py +0 -0
  542. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_decision_output.py +0 -0
  543. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_model_warmup_switch.py +0 -0
  544. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_tools_camera_gating.py +0 -0
  545. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_tools_comms_gating.py +0 -0
  546. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_tools_include_skim_files.py +0 -0
  547. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_tools_include_skim_folders.py +0 -0
  548. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_tools_include_skim_web.py +0 -0
  549. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_default_tools_search_files_executor.py +0 -0
  550. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_diary_capture.py +0 -0
  551. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_diary_write_rescue.py +0 -0
  552. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_directory_lease.py +0 -0
  553. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_disabled_toolsets_seam.py +0 -0
  554. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_discovery_facade_model_errors.py +0 -0
  555. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_discovery_survives_unbuildable_default.py +0 -0
  556. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_discovery_tts_unavailable_reason.py +0 -0
  557. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_discovery_voice_openai_api_key.py +0 -0
  558. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_discussion_session_anchor.py +0 -0
  559. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_document_markdown_tables.py +0 -0
  560. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_document_renderers_hr_quote.py +0 -0
  561. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_durable_toolsets.py +0 -0
  562. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_durable_write_discipline.py +0 -0
  563. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
  564. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_effect_cancellation.py +0 -0
  565. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_effect_interrupted.py +0 -0
  566. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_effect_issuance_idempotency.py +0 -0
  567. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_effect_payload_stays_json_serializable.py +0 -0
  568. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_election_consequence_teaching.py +0 -0
  569. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_binding_and_refiner.py +0 -0
  570. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_feeder_batched.py +0 -0
  571. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_feeder_flags.py +0 -0
  572. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_gate_fixes.py +0 -0
  573. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_inbox_and_trigger.py +0 -0
  574. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_received_mailbox_id.py +0 -0
  575. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_regate_fixes.py +0 -0
  576. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_review_fixes.py +0 -0
  577. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_self_trigger_loop.py +0 -0
  578. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_stream_consumers.py +0 -0
  579. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_email_toolset_and_walls.py +0 -0
  580. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_emergence_experiment.py +0 -0
  581. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_emit_event_uses_wait_index.py +0 -0
  582. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_emit_event_without_workflow_registry.py +0 -0
  583. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_endpoint_profile_media_end_to_end.py +0 -0
  584. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_endpoint_profile_media_in_process.py +0 -0
  585. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_endpoint_profile_media_specs_keep_provider.py +0 -0
  586. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_endpoint_profile_route_context.py +0 -0
  587. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_awake_memory_fixes.py +0 -0
  588. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_brain_effects.py +0 -0
  589. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_chat_driver.py +0 -0
  590. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_chat_tools_reflection.py +0 -0
  591. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_diary.py +0 -0
  592. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_execute_tool.py +0 -0
  593. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_fetch_url_tool.py +0 -0
  594. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_history_window.py +0 -0
  595. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_life_loop.py +0 -0
  596. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_memory_richness.py +0 -0
  597. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_phase_graph_conformance.py +0 -0
  598. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_react_visit_window.py +0 -0
  599. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_recent_memories.py +0 -0
  600. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_runtime.py +0 -0
  601. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_search_memory.py +0 -0
  602. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
  603. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_substrate_resolution.py +0 -0
  604. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_visit_honesty.py +0 -0
  605. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_workspace_cap.py +0 -0
  606. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_entity_workspace_tools.py +0 -0
  607. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_event_index_cross_process.py +0 -0
  608. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_event_wait_index.py +0 -0
  609. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
  610. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_evidence_recorder.py +0 -0
  611. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
  612. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_execute_command_output_offload.py +0 -0
  613. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_execution_capability_discovery.py +0 -0
  614. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_explicit_eject_other_clients.py +0 -0
  615. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_factory_default_retry_policy.py +0 -0
  616. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
  617. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_format_repair_nudge.py +0 -0
  618. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_fresh_install_no_provider.py +0 -0
  619. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_gateway_facades_c4899.py +0 -0
  620. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_git_read_only_refiner.py +0 -0
  621. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_hf_process_residency_merge.py +0 -0
  622. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_history_window_multimodal.py +0 -0
  623. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_hot_path_store_reads.py +0 -0
  624. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_indexed_idempotency_lookup.py +0 -0
  625. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_integration_abstractcore.py +0 -0
  626. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_integrations_abstractcore.py +0 -0
  627. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_json_file_run_store_change_token_after_build.py +0 -0
  628. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_json_file_run_store_children_index.py +0 -0
  629. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_json_file_run_store_index_build_race.py +0 -0
  630. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_json_run_cache_bound.py +0 -0
  631. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_json_store_scan_memo.py +0 -0
  632. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_jsonl_ledger_recovery.py +0 -0
  633. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_jsonl_ledger_seq_cross_process.py +0 -0
  634. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_jsonl_row_index.py +0 -0
  635. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_kg_learn_and_recall_contract.py +0 -0
  636. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_ledger_chain.py +0 -0
  637. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_ledger_cursor_invariants.py +0 -0
  638. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_ledger_get_record.py +0 -0
  639. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_ledger_record_slimming.py +0 -0
  640. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_ledger_subscription.py +0 -0
  641. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_live_token_deltas.py +0 -0
  642. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_media_artifact_refs.py +0 -0
  643. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
  644. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
  645. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_payload_shape_refusal.py +0 -0
  646. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_prefix_stability_contract.py +0 -0
  647. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_requires_prompt.py +0 -0
  648. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_response_schema_normalization.py +0 -0
  649. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_structured_output_fallback.py +0 -0
  650. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_text_phase_progress.py +0 -0
  651. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_truncation_retry_contract.py +0 -0
  652. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_use_context_appends_turn.py +0 -0
  653. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
  654. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_client_grounding_tail.py +0 -0
  655. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_client_media_artifacts.py +0 -0
  656. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_client_system_context.py +0 -0
  657. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_client_tool_call_parsing.py +0 -0
  658. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_retry_classification.py +0 -0
  659. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_llm_streaming_on_token.py +0 -0
  660. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_local_helper_tool_exposure.py +0 -0
  661. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_local_residency_host_sweep.py +0 -0
  662. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
  663. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mail_verbs.py +0 -0
  664. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mailbox_index.py +0 -0
  665. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_max_iterations_ceiling.py +0 -0
  666. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mcp_remote_tool_executor.py +0 -0
  667. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
  668. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mcp_worker_logging.py +0 -0
  669. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mcp_worker_security.py +0 -0
  670. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mcp_worker_stdio.py +0 -0
  671. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_media_artifact_resolution.py +0 -0
  672. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_media_capability_default_routing.py +0 -0
  673. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_media_host_endpoint_resolver.py +0 -0
  674. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_media_only_requests_skip_text_client.py +0 -0
  675. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_media_subprocess.py +0 -0
  676. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memact_composer_from_kg_result.py +0 -0
  677. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_appraise_handler.py +0 -0
  678. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_communities.py +0 -0
  679. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_facade.py +0 -0
  680. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
  681. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_kg_packets.py +0 -0
  682. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_kg_predicate_aliasing.py +0 -0
  683. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_kg_query_packetization_restart.py +0 -0
  684. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
  685. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
  686. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_note_effect.py +0 -0
  687. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_query_effect.py +0 -0
  688. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_query_rich_filters.py +0 -0
  689. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_revise.py +0 -0
  690. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
  691. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_seam_handlers.py +0 -0
  692. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_seam_sqlite_durability.py +0 -0
  693. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_step_provenance.py +0 -0
  694. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_memory_tag_effect.py +0 -0
  695. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mlx_generation_serialization.py +0 -0
  696. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_mlx_process_residency_merge.py +0 -0
  697. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_model_eject_cancel.py +0 -0
  698. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_model_residency_control_plane.py +0 -0
  699. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
  700. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_model_residency_release_and_readable_holders.py +0 -0
  701. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_multi_store_scheduler.py +0 -0
  702. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_multimodal_abstractcore_integration.py +0 -0
  703. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_native_mlx_application_wiring.py +0 -0
  704. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_native_mlx_execution_controls_live.py +0 -0
  705. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_native_tool_channel.py +0 -0
  706. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_night_voice.py +0 -0
  707. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_no_default_provider_refusal_ux.py +0 -0
  708. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_occurrence_named_inputs.py +0 -0
  709. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_occurrence_samples.py +0 -0
  710. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_offload_answer_chain_c4978.py +0 -0
  711. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
  712. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_offloading.py +0 -0
  713. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_parallel_readonly_tool_execution.py +0 -0
  714. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_pause_resume.py +0 -0
  715. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_pdf_unicode_rendering.py +0 -0
  716. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_personal_cycle.py +0 -0
  717. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_phantom_attachment_index.py +0 -0
  718. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_phase_graph_artifact_control.py +0 -0
  719. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_phase_graph_obedience.py +0 -0
  720. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_phase_vocabulary_migration.py +0 -0
  721. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
  722. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_export_import.py +0 -0
  723. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
  724. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_modules.py +0 -0
  725. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_posture_inheritance.py +0 -0
  726. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
  727. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_prompt_overlay.py +0 -0
  728. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_provider_endpoint_profile_resolution.py +0 -0
  729. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_provider_pin_routing_isolation.py +0 -0
  730. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_public_action_approval_context.py +0 -0
  731. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_publish_event.py +0 -0
  732. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_queryable_run_store.py +0 -0
  733. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_r12_workspace_sandbox.py +0 -0
  734. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
  735. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_read_idle_threading.py +0 -0
  736. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_readoption_experiment.py +0 -0
  737. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_real_integration.py +0 -0
  738. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_realize_election.py +0 -0
  739. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_recall_levels_policy.py +0 -0
  740. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_remote_client_cancel.py +0 -0
  741. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_remote_llm_client.py +0 -0
  742. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_remote_speculation_defaults.py +0 -0
  743. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_rendering_agent_trace_report.py +0 -0
  744. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_rendering_json_stringify.py +0 -0
  745. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_conformance.py +0 -0
  746. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_conformance_package.py +0 -0
  747. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_cursor_token.py +0 -0
  748. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_delta_cost.py +0 -0
  749. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_invariants.py +0 -0
  750. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_public_updates.py +0 -0
  751. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_review_findings.py +0 -0
  752. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_replay_tool_policy.py +0 -0
  753. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_report_branding.py +0 -0
  754. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_residency_fit_refusal_broadcast.py +0 -0
  755. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_resident_media_generation.py +0 -0
  756. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_resume_concurrent_same_wait.py +0 -0
  757. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_retry_idempotency.py +0 -0
  758. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_history_bundle.py +0 -0
  759. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_index_workspace_root.py +0 -0
  760. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_mutation_lock.py +0 -0
  761. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_origin.py +0 -0
  762. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_scoped_tool_policy.py +0 -0
  763. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_store_change_token.py +0 -0
  764. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_run_tool_scope_ceiling.py +0 -0
  765. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_browser_session_boundary.py +0 -0
  766. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
  767. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_default_provider_model_refresh.py +0 -0
  768. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_effect_invocation_trace.py +0 -0
  769. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_health_and_bounded_vars.py +0 -0
  770. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_install_boundary.py +0 -0
  771. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
  772. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_node_traces.py +0 -0
  773. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_start_seeds_tool_support.py +0 -0
  774. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_runtime_tick_step_gate.py +0 -0
  775. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_schedule_run.py +0 -0
  776. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_schedule_v1_corpus.py +0 -0
  777. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_schedule_v2_calendar.py +0 -0
  778. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_scheduler.py +0 -0
  779. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_send_email_refiner.py +0 -0
  780. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_send_email_self_default_policy.py +0 -0
  781. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
  782. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_history.py +0 -0
  783. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_prompt_cache_attribution.py +0 -0
  784. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_prompt_cache_visibility.py +0 -0
  785. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_route_stamp.py +0 -0
  786. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_start_cost.py +0 -0
  787. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_session_tool_policy.py +0 -0
  788. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_shell_tool_exposure.py +0 -0
  789. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_snapshots.py +0 -0
  790. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_speculation_inheritance.py +0 -0
  791. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_speculation_reaches_provider_construction.py +0 -0
  792. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_start_subworkflow_async_wait.py +0 -0
  793. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
  794. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
  795. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_steer_sidecar.py +0 -0
  796. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_step_context.py +0 -0
  797. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_storage_deletion.py +0 -0
  798. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_streamed_voice_namespace.py +0 -0
  799. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_structured_output_schema_enum.py +0 -0
  800. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_structured_schema_execution_client.py +0 -0
  801. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_subworkflow.py +0 -0
  802. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_terminal_effect_completion.py +0 -0
  803. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
  804. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_thinking_inheritance.py +0 -0
  805. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
  806. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_approval_executor.py +0 -0
  807. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_approval_resume_executes.py +0 -0
  808. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_approval_wait_key_identity.py +0 -0
  809. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_calls_idempotency_keys.py +0 -0
  810. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_catalog.py +0 -0
  811. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_descriptor_registry.py +0 -0
  812. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_executor_argument_sanitization.py +0 -0
  813. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_executor_filename_alias.py +0 -0
  814. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
  815. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_executor_read_file_aliases.py +0 -0
  816. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_executor_timeout.py +0 -0
  817. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_inventory_facade.py +0 -0
  818. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_invoke_effect.py +0 -0
  819. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_policy_and_mounts.py +0 -0
  820. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_tool_wait_allowlist_safety.py +0 -0
  821. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_topic_election_world_model.py +0 -0
  822. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trace_context_propagation.py +0 -0
  823. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_cloudevents.py +0 -0
  824. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_connection_listening.py +0 -0
  825. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_connections.py +0 -0
  826. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_feed.py +0 -0
  827. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_registry.py +0 -0
  828. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_schedule_math.py +0 -0
  829. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trigger_webhook.py +0 -0
  830. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_trusted_run_index.py +0 -0
  831. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_turn_grounding_byte_stability.py +0 -0
  832. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_turn_grounding_carriers_a3.py +0 -0
  833. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_vars_query_effect.py +0 -0
  834. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visit_ab_fixture.py +0 -0
  835. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visit_live_guidance.py +0 -0
  836. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visit_midturn_elections.py +0 -0
  837. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visit_midturn_resume.py +0 -0
  838. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visit_workflow.py +0 -0
  839. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
  840. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
  841. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
  842. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
  843. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
  844. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
  845. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_compare_typed_values.py +0 -0
  846. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_entity_memory_nodes.py +0 -0
  847. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
  848. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_llm_call_partial_override.py +0 -0
  849. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
  850. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_loop_back_out_of_body.py +0 -0
  851. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
  852. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_loop_limit_on_wire.py +0 -0
  853. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_memact_compose_node.py +0 -0
  854. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
  855. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
  856. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
  857. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_reroute_lowering.py +0 -0
  858. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_set_vars_pins.py +0 -0
  859. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_unknown_node_type_refuses.py +0 -0
  860. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
  861. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_add_message_builtin.py +0 -0
  862. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
  863. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_agora_react_agent.py +0 -0
  864. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_call_tool_node.py +0 -0
  865. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
  866. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_compiler_basic.py +0 -0
  867. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
  868. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_continue_on_error.py +0 -0
  869. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_edit_json_schema_node.py +0 -0
  870. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
  871. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_file_nodes_workspace.py +0 -0
  872. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_function_library.py +0 -0
  873. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_get_element_node.py +0 -0
  874. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_get_random_element_node.py +0 -0
  875. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_get_var_node.py +0 -0
  876. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_has_tools_builtin.py +0 -0
  877. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
  878. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
  879. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_make_object_node.py +0 -0
  880. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_media_nodes.py +0 -0
  881. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_memory_effect_nodes.py +0 -0
  882. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_memory_source_pins.py +0 -0
  883. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_pin_expressions.py +0 -0
  884. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_prompt_only.py +0 -0
  885. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_random_nodes.py +0 -0
  886. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_schema_enum_switch.py +0 -0
  887. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_string_contains_replace.py +0 -0
  888. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_visualflow_tool_parameters_node.py +0 -0
  889. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_voice_library_facade.py +0 -0
  890. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_voice_openai_api_key_path.py +0 -0
  891. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_voice_projection_contract.py +0 -0
  892. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_voice_stream_is_not_a_wait.py +0 -0
  893. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_w4_feelings_lens.py +0 -0
  894. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_wait_event_deadline.py +0 -0
  895. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_wait_event_prompt_metadata.py +0 -0
  896. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_wait_until_streak.py +0 -0
  897. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_wait_until_utc_normalization.py +0 -0
  898. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workflow_bundle_registry.py +0 -0
  899. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_builtin_deny.py +0 -0
  900. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_context_allowed_workspaces.py +0 -0
  901. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
  902. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_policy_allowlist_mode.py +0 -0
  903. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
  904. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
  905. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_prompt_context.py +0 -0
  906. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_read_only.py +0 -0
  907. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_workspace_writable_paths.py +0 -0
  908. {abstractruntime-0.17.0 → abstractruntime-0.18.0}/tests/test_write_chart.py +0 -0
@@ -10,6 +10,95 @@ Unreleased changes live in [`changelog.d/`](changelog.d/README.md), one file per
10
10
 
11
11
  ## [Unreleased]
12
12
 
13
+ ## [0.18.0] - 2026-11-04
14
+
15
+ ### Added
16
+
17
+ - **Acquaintances of an entity or a session** (`identity/acquaintances.py`, framework backlog 1119):
18
+ `entity_acquaintances(home_dir, run_store)` and `session_acquaintances(session_id, run_store)` answer two
19
+ lists, the other entities and the humans it interacted with, each with first and last seen, the number of
20
+ interactions and the task kinds. Computed from existing records, never stored: the participants the
21
+ gateway stamps on visit, summon and meet runs, the person who started a run (`_meta.origin`), and who left
22
+ a task in the task inbox. Identifiers only; interactions with no usable identifier (an `agent:` participant,
23
+ a participant without a namespace, a person-started run without an actor) are listed under `not_counted`,
24
+ never guessed. See `docs/track-record.md#acquaintances`.
25
+ - **An entity's digital identity: its look and its voice, one record in its home**
26
+ (`abstractruntime.identity.digital_identity`, framework ADR 0052 draft, backlog 1119; `docs/digital-identity.md`).
27
+ `<home>/identity.json` holds the avatar design, its colour and the voice (`schema_version` 1). `write_identity` checks
28
+ every bound (`IdentityInvalid` names the field), runs the gateway's `check` hook, appends an `identity_changed` row to
29
+ `state_history.jsonl` (the `phase_changed` field names) before the file is replaced atomically, and never gives a
30
+ `rev` twice: one write at a time per home (`<home>/.identity.lock`, held from the read to the file replace). A
31
+ file it cannot read in full raises `IdentityUnreadable` on read and on write, never "no identity".
32
+ `default_identity` is the recorded default anyone can recompute (SHA-256 of the entity id, eight engraved Watch
33
+ designs, an HSL colour, the gateway's default voice as a value); `record_default_identity` writes it once and never
34
+ overwrites. `identity_at_rev` answers an old rev from the biography. The reference `entity:castor#3` rides
35
+ `vars._runtime.identity_ref` beside the signed entity stamp (`stamp_run_identity_ref`, `read_run_identity_ref`,
36
+ `parse_identity_ref`). `identity_fingerprint` derives the individual's `actor_id` from the manifest, with the diary's
37
+ chain head. Homes without `identity.json` are untouched.
38
+ - **The summon tells the entity when its look or voice changed**: one sentence ("Your voice changed on 4 November (by
39
+ laurent): now fr-male-rene.") in the summon prelude, after the identity core, when the change is newer than the
40
+ previous summon (`render_summon_prelude(home_dir=, identity_since=)`, `ChatSession(identity_since=)`,
41
+ `build_visit_workflow(identity_since=)` or `_visit.identity_since` seeded by the door).
42
+ - **The idle unload reaches the host: `set_model_idle_unload(seconds)`** (host facade, `LocalAbstractCoreLLMClient`,
43
+ `MultiLocalAbstractCoreLLMClient`; framework backlog 1115). It relays AbstractCore's process-wide idle-unload time
44
+ (ADR 0012, default 60 minutes): a model no call has used for that long is unloaded, a locked model never is, and a
45
+ running call is never interrupted. `None` or `0` turns it off; a refused value answers `ok: false`. Local residency
46
+ rows of in-process text models carry `idle_unload_s`, `last_used_at` and `idle_unload_at`, and pass through Core's
47
+ `in_use` and `locked_by`, so a host can show a model that is in use, or kept loaded by another account.
48
+ - **`set_model_residency_locks(locks)`**: the locked models become exactly the listed ones (resident ones locked,
49
+ missing ones loaded then locked, the others unlocked), each pair with its own outcome. A lock names a provider and a
50
+ model; the `base_url` of a configured endpoint is not part of the key. A host stores its "Keep loaded" set and
51
+ replays it at start; as a `set_` name it is replayed when the gateway's model host rebuilds a client.
52
+ - **Track record and reputation of an entity or a session** (`identity/track_record.py`, ADR 0052 §5-§6,
53
+ framework backlog 1119). `entity_track_record(home_dir, run_store, ledger_store, *, book_head)` and
54
+ `session_track_record(session_id, run_store, ledger_store)` answer sessions, runs, successes, failures,
55
+ cancelled, in progress and tokens (input, output, total), per task kind (`<phase or role>/<workflow_id>`,
56
+ from ids only) and overall; `compute_reputation(record)` gives trust per task kind,
57
+ `(successes + 1) / (successes + failures + 2)` with its support, the support-weighted overall, and the
58
+ last 20 outcomes as evidence ("no experience yet" when there is none). Everything is computed from
59
+ existing records; nothing is stored. Only work from outside counts: turn roots a person or a trigger
60
+ started and automation occurrences (once each, however many attempts); sub-runs, controllers, the
61
+ session memory run and runs another run or the system started never do. Outcomes come from the run
62
+ status, the occurrence's `automation.completed` decision, an entity task marked `done`, and the work
63
+ order verdicts (`done:` / `blocked:`). Feedback from people and agents (`feedback_user`,
64
+ `feedback_agent`) is typed but has no source yet, so every answer says `basis: "completion-rate only"`.
65
+ Each answer names its subject's `identity_ref` and, for an entity, its `identity_fingerprint`.
66
+ See `docs/track-record.md`.
67
+ - **`metrics_many` also returns `tokens_input` and `tokens_output`** (SQLite ledger): `usage.input_tokens`
68
+ (else `prompt_tokens`) and `output_tokens` (else `completion_tokens`) of completed `llm_call` records.
69
+ Existing keys are unchanged.
70
+ - **`identity.life.read_work_order_verdicts(home_dir)`**: the verdicts the work lane archived in
71
+ `work_order.done.md`, oldest first.
72
+
73
+ ### Changed
74
+
75
+ - **AbstractCore 2.34.0 or newer** (base install, `apple` and `gpu` settings): the idle unload and its residency rows
76
+ come from it.
77
+ - **A load with `ttl_s` or `keep_alive` on an in-process model** still lists them under `unsupported_options`; its
78
+ warning now names the idle unload that applies instead ("the idle unload setting applies (60 min unused, never while
79
+ it is kept loaded)"), or says it is off.
80
+
81
+ ### Fixed
82
+
83
+ - **A run store whose index cannot attribute a session is refused, never started as a plain chat**
84
+ (`core/run_attribution.py`, framework backlog 0938). A third-party store with `list_run_index` but no `session_kind`
85
+ in its rows (an index written before automations v1) used to report "no kinds" and let a `discussion-session:` start
86
+ through as an ordinary chat, skipping the discussion's read-only anchor. It now raises `SessionAttributionError`
87
+ naming the missing column; a store with no index at all names both methods it lacks. Built-in stores are unchanged.
88
+ Upgrading a custom store: add `session_kind` and `role` to its index rows, or implement `session_kinds(session_id)`
89
+ (see `docs/automations.md`, "Storage guarantees").
90
+ - **A tool that reports its failure as a JSON object keeps its explanation** (`integrations/abstractcore/tool_executor.py`,
91
+ framework backlog 1005). A failed result's `output` used to be emptied when the tool returned its failure as a JSON
92
+ string, so the agent and the run ledger saw only the error line (for a web search: "No results found", never the
93
+ backends tried, the bot-challenge status or the hint). The parsed object is now the result's `output`, as for a tool
94
+ that returns a dict; a plain text error (`Error: ...`) still keeps an empty output and its message in `error`.
95
+ - **The visual-flow Agent node shows the model that explanation** (`visualflow_compiler/compiler.py`). A failed call
96
+ whose `output` is an object is rendered as its error line followed by the object (`[web_search]: Error: No results
97
+ found` then the JSON), under the same `agent_observation_max_chars` limit; a plain text failure still shows its error
98
+ line alone.
99
+ - Failure payloads are now recorded in the run ledger and the history bundle like success payloads: whatever a tool puts
100
+ in its failure JSON (its parameters included) is stored with the run.
101
+
13
102
  ## [0.17.0] - 2026-11-03
14
103
 
15
104
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: AbstractRuntime
3
- Version: 0.17.0
3
+ Version: 0.18.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.33.0
23
+ Requires-Dist: abstractcore>=2.34.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.33.0; extra == 'apple'
38
+ Requires-Dist: abstractcore[apple]>=2.34.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.33.0; extra == 'gpu'
45
+ Requires-Dist: abstractcore[gpu]>=2.34.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,32 @@ Description-Content-Type: text/markdown
55
55
 
56
56
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
57
57
 
58
- **Version:** 0.17.0 • **Python:** 3.10+
58
+ **Version:** 0.18.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.18.0
63
+
64
+ - **Models unload after being idle**: a host sets how long a local model may sit unused (`set_model_idle_unload`,
65
+ AbstractCore's default 60 minutes; off with `None` or `0`); a running call is never interrupted and a model kept
66
+ loaded never unloads. `set_model_residency_locks` relays the host's "Keep loaded" set, and both come back after a
67
+ model-host restart. Loaded-model rows say when a model was last used, whether it is in use, who keeps it loaded
68
+ and when it unloads. Requires AbstractCore 2.34.0 or newer.
69
+ - **A failed tool keeps its explanation**: a tool that reports its failure as a JSON object (a web search's backends,
70
+ bot-challenge status and hint) keeps it in the result, the run ledger and what the visual-flow Agent node shows
71
+ the model, after the error line.
72
+ - **A store that cannot attribute a session is refused**: a custom run store whose index rows lack `session_kind`
73
+ no longer lets a discussion start as a plain chat; it raises `SessionAttributionError` naming what to add.
74
+ - **An entity has a recorded look and voice**: one record in its home holds its avatar and its voice, with a default
75
+ from birth and every change remembered (the entity is told when its look or voice changed). See
76
+ [docs/digital-identity.md](docs/digital-identity.md).
77
+ - **An entity has a track record and a first reputation**: both are computed from what it has done (runs, outcomes,
78
+ tokens per kind of task); until feedback from people and agents exists, the reputation is the completion rate
79
+ only. See [docs/track-record.md](docs/track-record.md).
80
+ - **An entity knows its acquaintances**: the entities and people it has interacted with are listed from its own
81
+ records, with when they first and last met. See [docs/track-record.md](docs/track-record.md#acquaintances). Full
82
+ list: [CHANGELOG.md](CHANGELOG.md).
83
+
62
84
  ## What's new in 0.17.0
63
85
 
64
86
  - **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
@@ -80,7 +102,7 @@ It is designed for long-running workflows that must survive restarts and explici
80
102
  - **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
81
103
  (`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
82
104
  durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
83
- 2.32.0 or newer (AbstractRuntime 0.17.0 requires 2.33.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
105
+ 2.32.0 or newer (AbstractRuntime 0.18.0 requires 2.34.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
84
106
  - **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
85
107
  clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
86
108
  words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
@@ -161,7 +183,7 @@ Remote-light runtime:
161
183
  pip install abstractruntime
162
184
  ```
163
185
 
164
- The base install includes AbstractCore 2.33.0 or newer (its light install:
186
+ The base install includes AbstractCore 2.34.0 or newer (its light install:
165
187
  remote providers, tools, vision, voice, audio, music, and decision integration), plus the
166
188
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
167
189
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
@@ -4,10 +4,32 @@
4
4
 
5
5
  It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
6
6
 
7
- **Version:** 0.17.0 • **Python:** 3.10+
7
+ **Version:** 0.18.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.18.0
12
+
13
+ - **Models unload after being idle**: a host sets how long a local model may sit unused (`set_model_idle_unload`,
14
+ AbstractCore's default 60 minutes; off with `None` or `0`); a running call is never interrupted and a model kept
15
+ loaded never unloads. `set_model_residency_locks` relays the host's "Keep loaded" set, and both come back after a
16
+ model-host restart. Loaded-model rows say when a model was last used, whether it is in use, who keeps it loaded
17
+ and when it unloads. Requires AbstractCore 2.34.0 or newer.
18
+ - **A failed tool keeps its explanation**: a tool that reports its failure as a JSON object (a web search's backends,
19
+ bot-challenge status and hint) keeps it in the result, the run ledger and what the visual-flow Agent node shows
20
+ the model, after the error line.
21
+ - **A store that cannot attribute a session is refused**: a custom run store whose index rows lack `session_kind`
22
+ no longer lets a discussion start as a plain chat; it raises `SessionAttributionError` naming what to add.
23
+ - **An entity has a recorded look and voice**: one record in its home holds its avatar and its voice, with a default
24
+ from birth and every change remembered (the entity is told when its look or voice changed). See
25
+ [docs/digital-identity.md](docs/digital-identity.md).
26
+ - **An entity has a track record and a first reputation**: both are computed from what it has done (runs, outcomes,
27
+ tokens per kind of task); until feedback from people and agents exists, the reputation is the completion rate
28
+ only. See [docs/track-record.md](docs/track-record.md).
29
+ - **An entity knows its acquaintances**: the entities and people it has interacted with are listed from its own
30
+ records, with when they first and last met. See [docs/track-record.md](docs/track-record.md#acquaintances). Full
31
+ list: [CHANGELOG.md](CHANGELOG.md).
32
+
11
33
  ## What's new in 0.17.0
12
34
 
13
35
  - **A host stop suspends a run, it never fails it**: a host that stops on purpose raises `EffectInterrupted` into
@@ -29,7 +51,7 @@ It is designed for long-running workflows that must survive restarts and explici
29
51
  - **Calibrated decisions**: an `LLM_CALL` whose output says `modality: "decision"` returns typed answers
30
52
  (`answers`, `decision`) from a decision model instead of generated text; `run_facade.decide(...)` runs one as a
31
53
  durable child run and the `decide` VisualFlow node asks a choice, yes/no or score question. Requires AbstractCore
32
- 2.32.0 or newer (AbstractRuntime 0.17.0 requires 2.33.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
54
+ 2.32.0 or newer (AbstractRuntime 0.18.0 requires 2.34.0). See [docs/integrations/abstractcore.md](docs/integrations/abstractcore.md).
33
55
  - **Conversational questions and guidance**: `ASK_USER` can ask an essential question (waits indefinitely) or a timed
34
56
  clarification with a declared fallback; `Runtime.steer(..., display_text=)` records human guidance in its exact
35
57
  words; opt-in public updates and tool-approval `public_action` context appear in the replay view.
@@ -110,7 +132,7 @@ Remote-light runtime:
110
132
  pip install abstractruntime
111
133
  ```
112
134
 
113
- The base install includes AbstractCore 2.33.0 or newer (its light install:
135
+ The base install includes AbstractCore 2.34.0 or newer (its light install:
114
136
  remote providers, tools, vision, voice, audio, music, and decision integration), plus the
115
137
  `abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
116
138
  default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
@@ -44,6 +44,8 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
44
44
 
45
45
  - `automations.md` — automations: a workflow run on a schedule, on an event or on request as a durable controller run; triggers (`schedule@1`, `schedule@2` calendar rules in a time zone, `manual@1`, `email.received@1`, `feed.item@1` RSS 2.0 / RSS 1.0 / Atom, `webhook.received@1` Standard Webhooks, entry-point sources), per-user trigger connections, the CloudEvents envelope (`input_data.event`), run origin (`_meta.origin`), wakes (`SCHEDULE_RUN`: work later in the same session, with at most the caller's tools), Publish to channel (`PUBLISH_EVENT`, alerts with `recipient` and `channels`), commands, independent or growing context, discussions forked at any occurrence (own writable workspace, the automation's workspace mounted read-only), tool approval, typed waits, notifications and retries, and the storage guarantees (create-if-absent, per-run lock, turn roots, session kinds, one writer process per store)
46
46
  - `entity-runtime.md` — per-entity runtimes for summoned entities: homes, the one-writer lease, act-only diary privacy (`$act_only` refs), durable visit waits with deadlines
47
+ - `digital-identity.md` — an entity's look and voice: `identity.json` in the home, the recorded default, the `identity_changed` biography row, the identity reference on runs, the fingerprint, the summon cue
48
+ - `track-record.md` — an entity's or a session's track record (sessions, runs, successes, failures, tokens) and reputation (trust per task kind with its evidence), computed from existing records; completion rates until feedback exists; and its acquaintances (the entities and humans it met)
47
49
  - `evidence.md` — artifact-backed evidence capture for external-boundary tools
48
50
  - `mcp-worker.md` — MCP worker CLI (`abstractruntime-mcp-worker`)
49
51
  - `replay.md` — the replay view: one reconstruction of a run tree (status, the interaction to answer, messages, one activity per execution, artifacts, usage, the workflow it executes) that every client renders; the durable cursor (`seq`, `list_after`); conformance fixtures
@@ -459,7 +459,7 @@ Implementation: `src/abstractruntime/replay/` (ADR 0010). Guide: [replay.md](rep
459
459
 
460
460
  ### AbstractCore (LLM + tools)
461
461
 
462
- Requires: `pip install abstractruntime` (AbstractCore 2.33.0 or newer is part of the base install).
462
+ Requires: `pip install abstractruntime` (AbstractCore 2.34.0 or newer is part of the base install).
463
463
 
464
464
  Implementation: `src/abstractruntime/integrations/abstractcore/*`.
465
465
 
@@ -1020,8 +1020,12 @@ Automations rely on four store guarantees. Hosts that bring their own store must
1020
1020
  chat. The JSON store also removes run temp files older than 10 minutes, left behind by a crash, when it opens.
1021
1021
  - **A run index for sessions.** `Runtime.start` checks the attribution of every root run that names a session. A
1022
1022
  store without a run index (no `session_kinds` and no `list_run_index`) cannot answer, and the start is refused with
1023
- `SessionAttributionError` rather than risk starting an unanchored run in a discussion session. Strict history reads
1024
- and `latest_occurrence` (which uses the store's `latest_occurrence_row`) need the index too.
1023
+ `SessionAttributionError` rather than risk starting an unanchored run in a discussion session. A store whose
1024
+ `list_run_index` rows do not carry `session_kind` (an index written before automations v1) cannot tell a discussion
1025
+ from a chat either: its session-bearing starts are refused the same way, never started as a plain chat. To upgrade
1026
+ a custom store, add `session_kind` and `role` to its index rows, or implement `session_kinds(session_id)`. The
1027
+ built-in stores already do. Strict history reads and `latest_occurrence` (which uses the store's
1028
+ `latest_occurrence_row`) need the index too.
1025
1029
 
1026
1030
  ### Crash safety
1027
1031
 
@@ -0,0 +1,184 @@
1
+ # Digital identity (an entity's look and voice)
2
+
3
+ Every entity has one digital identity: the avatar design the apps draw for it, the colour of that
4
+ design, and the voice it speaks with. AbstractRuntime keeps it as one small file in the entity's
5
+ home, `identity.json`, and owns its format and its writer
6
+ (`abstractruntime.identity.digital_identity`). AbstractGateway checks what only it can check (the
7
+ design is in the avatar catalog it loaded, the voice is offered and downloaded, the home is not
8
+ held for maintenance) and then calls the runtime writer. Apps read the identity through the
9
+ gateway. This page documents the runtime half; the decision record is the framework's ADR 0052.
10
+
11
+ Identity says WHO the entity is. What it is doing right now (activity, poses) is a separate
12
+ subject.
13
+
14
+ ## The record
15
+
16
+ ```json
17
+ {
18
+ "schema_version": 1,
19
+ "rev": 2,
20
+ "avatar": {"style": "watch-vortex", "color": "#3a7bd5", "source": "chosen"},
21
+ "voice": {"provider": "abstractvoice", "model": "qwen3-tts", "voice": "fr-male-rene", "source": "chosen"},
22
+ "set_at": "2026-11-04T09:00:00+00:00",
23
+ "set_by": "user:laurent"
24
+ }
25
+ ```
26
+
27
+ | Field | Rule |
28
+ |---|---|
29
+ | `schema_version` | exactly 1 |
30
+ | `rev` | 1 for the first record, one more for each write, never reused |
31
+ | `avatar.style` | an abstractavatar design id: a lowercase letter, then up to 63 lowercase letters, digits or dashes |
32
+ | `avatar.color` | `#rrggbb`, lowercase hex |
33
+ | `avatar.source`, `voice.source` | `default` (the recorded default) or `chosen` |
34
+ | `voice` | `provider`, `model` and `voice` together (each non-empty, at most 128 printable characters), optional `speed` (above 0, at most 4) and `quality_preset` (at most 32 characters); or `null` |
35
+ | `set_at` | UTC time with its offset, set by the writer's clock |
36
+ | `set_by` | `namespace:name` (for example `user:laurent`), `operator`, or `default` |
37
+
38
+ `voice: null` is allowed only on the recorded default of a gateway that had no default voice
39
+ (`set_by: default`, `avatar.source: default`). Such an entity has no voice and says so; it never
40
+ borrows one. The whole file is at most 4096 bytes.
41
+
42
+ A file the runtime cannot read in full raises `IdentityUnreadable`, on read and on write: a newer
43
+ `schema_version`, broken JSON, a missing field, an unknown field, or a value out of bounds. It is
44
+ never treated as "no identity", and the writer never overwrites it. A home without
45
+ `identity.json` reads as `None`: its older `voice.yaml` and `appearance.json` are the gateway's to
46
+ read, and the runtime never touches them.
47
+
48
+ ## Writing it
49
+
50
+ ```python
51
+ from abstractruntime.identity import AvatarChoice, VoiceChoice, write_identity
52
+
53
+ record = write_identity(
54
+ home_dir,
55
+ avatar=AvatarChoice(style="watch-vortex", color="#3a7bd5", source="chosen"),
56
+ voice=VoiceChoice(provider="abstractvoice", model="qwen3-tts", voice="fr-male-rene", source="chosen"),
57
+ set_by="user:laurent",
58
+ cause="chosen",
59
+ provenance="PUT /entities/castor/identity",
60
+ check=gateway_checks, # optional: raise to refuse (catalog, offered voice, downloaded model)
61
+ )
62
+ ```
63
+
64
+ In this order: the current file is read; the new record gets the next `rev` and `set_at`; every
65
+ bound is checked (`IdentityInvalid`, whose `field` names the bad value, for example
66
+ `voice.speed`); `check(record)` runs; one row is appended to the home's biography; then the file
67
+ is replaced atomically. A refusal before the row writes nothing.
68
+
69
+ The biography is `<home>/state_history.jsonl`, the same append-only file and field names as the
70
+ `phase_changed` rows, so one reader handles both:
71
+
72
+ ```json
73
+ {"marker": "identity_changed", "rev": 2, "from": {...rev 1...}, "to": {...rev 2...},
74
+ "written_by": "user:laurent", "cause": "chosen", "at": "2026-11-04T09:00:00+00:00",
75
+ "provenance": "PUT /entities/castor/identity"}
76
+ ```
77
+
78
+ The row is on disk before the file moves. If the file then fails to move, the old identity stays,
79
+ the row stays, and the next write takes the rev after it: a rev is never given twice.
80
+ `identity_at_rev(home_dir, n)` answers what the identity was at rev `n` from the current file or
81
+ from these rows (a rev whose file never landed raises `LookupError`), so a copied home knows every
82
+ look and voice it ever had. `life_sleep_stats` skips these rows like every other marker row.
83
+
84
+ One write at a time per home: every write holds `<home>/.identity.lock` from its first read to
85
+ the file replace, and a second writer (another thread, another process, the gateway's start-up
86
+ pass racing a change from an app) waits its turn. Two writers never read the same rev, so a rev
87
+ is never given twice, and two default passes racing on one home write it once. The check hook
88
+ runs under the lock: keep it short. The lock file is never removed.
89
+
90
+ ## The recorded default
91
+
92
+ Every entity has a look and, when the gateway has a default voice, a voice from day one. The
93
+ default is recorded, never computed again at read time: once written it does not change when the
94
+ gateway's default voice changes.
95
+
96
+ `default_identity(entity_id, gateway_default_voice)` returns `(avatar, voice)`; it is pure (no
97
+ clock, no randomness), so anyone can recompute it:
98
+
99
+ - seed = SHA-256 of the entity id exactly as the manifest records it (`entity:castor`, or the
100
+ older `entity:castor@<home_id>`);
101
+ - design = `DEFAULT_STYLE_POOL[seed[0] % 8]`, the pool being, in this order: `watch-halo`,
102
+ `watch-vortex`, `watch-nebula`, `watch-rings`, `watch-galaxy`, `watch-lotus`, `watch-crystal`,
103
+ `watch-aurora` (all eight have a Watch drawing in abstractavatar 0.1.1);
104
+ - colour = HSL(hue = (seed[1] × 256 + seed[2]) mod 360, saturation 62 %, lightness 52 %), each RGB
105
+ channel = floor(c × 255 + 0.5), written `#rrggbb`;
106
+ - voice = the gateway's default voice `{provider, model, voice, speed?, quality_preset?}` as a
107
+ value, or `None` when it has none;
108
+ - `source: default` on both parts.
109
+
110
+ Worked example: for `entity:castor` the seed starts `0x1a 0x92 0x51`, so the design is
111
+ `26 % 8 = 2` → `watch-nebula` and the hue is `(146 × 256 + 81) % 360 = 17` → `#d06439`.
112
+
113
+ `record_default_identity(home_dir, entity_id=..., gateway_default_voice=..., provenance=...)`
114
+ writes it as the home's first record (`set_by: default`, biography `cause: recorded_default`) and
115
+ returns `(record, True)`; on a home that already has a record it returns `(record, False)` and
116
+ writes nothing. The gateway calls it at birth, once per existing home when it starts, and on the
117
+ first read of a home that start skipped.
118
+
119
+ ## The reference
120
+
121
+ Apps name an identity by reference, never by a copy of its values: `{"of": <subject>, "rev": <n>}`,
122
+ string form `<subject>#<n>`.
123
+
124
+ ```python
125
+ from abstractruntime.identity import identity_ref, parse_identity_ref
126
+
127
+ ref = identity_ref("entity:castor", 3)
128
+ str(ref) # "entity:castor#3"
129
+ parse_identity_ref("session:sess_9f2a#1") # a regular agent's identity rides its session
130
+ ```
131
+
132
+ `parse_identity_ref` refuses anything else (`castor`, `entity:castor`, `entity:castor#0`,
133
+ `entity:castor#03`). On a run the reference rides `vars["_runtime"]["identity_ref"]` as
134
+ `{"of", "rev"}`, beside the signed entity stamp (`vars["_runtime"]["entity"]`) and never inside
135
+ it: presentation is not authority. `stamp_run_identity_ref(vars, ref)` puts it there;
136
+ `read_run_identity_ref(vars)` returns it, or `None` when the run carries none (a reference is never
137
+ made up). An old rev resolves through `identity_at_rev`.
138
+
139
+ ## The fingerprint
140
+
141
+ `identity_fingerprint(manifest, book_head=diary.head())` names the individual:
142
+ `actor_id = ActorFingerprint.from_metadata(kind="entity", display_name=<slug>,
143
+ metadata={entity_id, home_id, spark_hash}).actor_id` (`ar_` + 24 hex), served with the continuity
144
+ receipts the home already has: `spark_hash` (the seed), `home_id` (the individual) and `book_head`
145
+ (the diary's chain head). It is derived on every read and stored nowhere. A copy of a home with a
146
+ new `home_id` is a different individual with a different `actor_id`. There are no keys and no
147
+ signatures.
148
+
149
+ ## The summon cue
150
+
151
+ At a summon the entity is told, in one sentence, about the change that made its current identity:
152
+
153
+ - "You were given your look and voice today." (the first record)
154
+ - "You were given your look today; you have no voice yet." (a first record without a voice)
155
+ - "Your voice changed on 4 November (by laurent): now fr-male-rene."
156
+ - "Your look changed today (by the operator): now watch-lotus in #aa3344."
157
+ - "Your look and voice changed today (by laurent): now watch-vortex in #3a7bd5, voice en-female-amy."
158
+
159
+ `identity_change_cue(home_dir, since=...)` returns that sentence, or `None`. It speaks of the
160
+ biography row of the current rev (never of a row whose file did not land), and only when that row
161
+ is newer than `since`, the previous summon's time; with `since=None` (the caller knows no previous
162
+ summon) it is always told. Dates are UTC.
163
+
164
+ `render_summon_prelude(..., home_dir=..., identity_since=...)` puts the sentence after the
165
+ identity core and before the diary tail, as a section that may be dropped to fit the budget (it is
166
+ fitted first). The prelude stays a pure read. The chat driver (`ChatSession(...,
167
+ identity_since=...)`) and the durable visit workflow (`build_visit_workflow(...,
168
+ identity_since=...)`, or `_visit.identity_since` seeded by the door at run creation, which wins)
169
+ pass the summon's home. An unreadable identity is named in the prelude's warnings; it does not
170
+ stop the summon.
171
+
172
+ The diary stays the entity's own record: nothing here writes a diary entry. The entity may write
173
+ one itself after hearing the cue.
174
+
175
+ ## Tests
176
+
177
+ `tests/test_digital_identity.py` (`-m basic`): the round trip and the row shape, every bound
178
+ naming its field, unreadable files refused on read and on write, the row before the file, the rev
179
+ never reused, the default rule against an independent HSL computation and a worked value, the pool
180
+ order, purity over 1000 calls, two homes of one spark getting different colours, the pool checked
181
+ against abstractavatar's catalog (skipped when the package is not installed), idempotent default
182
+ writes, the reference format and its place beside the stamp, the fingerprint formula, the cue
183
+ sentences and the `since` rule, and the cue in place in the prelude, the chat driver and the visit
184
+ workflow.
@@ -15,6 +15,9 @@ entities/castor/
15
15
  manifest.json # entity_id (birth marker — never a lookup key)
16
16
  spark.yaml # the attested seed
17
17
  substrate.yaml # operator's ONE mind choice (provider+model)
18
+ identity.json # look and voice (digital-identity.md)
19
+ .identity.lock # one identity write at a time
20
+ state_history.jsonl # biography: state, phase_changed and identity_changed rows
18
21
  memory.sqlite3 # graph + journal (abstractmemory)
19
22
  home.sqlite3 # diary book + command inbox
20
23
  runtime_castor.sqlite3 # run store + ledger (THIS page)
@@ -12,7 +12,7 @@ Remote-light runtime:
12
12
  pip install abstractruntime
13
13
  ```
14
14
 
15
- This installs AbstractCore 2.33.0 or newer with remote provider, vision,
15
+ This installs AbstractCore 2.34.0 or newer with remote provider, vision,
16
16
  voice, audio, music, decision, tool, and MCP-worker support. The base install is
17
17
  remote-light: it can route multimodal workflows to hosted or OpenAI-compatible
18
18
  endpoints, but it does not select local inferencer stacks such as MLX, vLLM,
@@ -16,7 +16,7 @@ Implementation pointers (this repo):
16
16
  pip install abstractruntime
17
17
  ```
18
18
 
19
- The base install includes AbstractCore 2.33.0 or newer. That is the supported baseline for the `decision` output modality (the `output.decision` route and `/v1/decisions`), the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), generated-media contracts, image upscaling, capability catalog, prompt-cache control-plane endpoints (including session attribution via `/acore/prompt_cache/key_meta`), host memory snapshots, the host-wide loaded-model sweep used by residency listings, the process-wide MLX residency report and eject used by model unload, durable bloc prompt-cache helpers, bindings and lifecycle operations, task-aware model residency for text/image/video/TTS/STT, current tool catalog, AbstractCore's public output-selector contract, async/sync text-generation output-selector parity, video generation endpoints, the public local vision-cache catalog helper used by Runtime discovery, vision adapter discovery plus batch/LoRA media controls, and the released shared workspace/file-filter utility surface used by Runtime packaging and integration checks.
19
+ The base install includes AbstractCore 2.34.0 or newer. That is the supported baseline for the idle unload (`set_model_idle_unload`, residency rows with `last_used_at`, `in_use`, `locked_by`, `idle_unload_at`), the `decision` output modality (the `output.decision` route and `/v1/decisions`), the current server auth split (`Authorization` for server auth, `X-AbstractCore-Provider-API-Key` for provider overrides), generated-media contracts, image upscaling, capability catalog, prompt-cache control-plane endpoints (including session attribution via `/acore/prompt_cache/key_meta`), host memory snapshots, the host-wide loaded-model sweep used by residency listings, the process-wide MLX residency report and eject used by model unload, durable bloc prompt-cache helpers, bindings and lifecycle operations, task-aware model residency for text/image/video/TTS/STT, current tool catalog, AbstractCore's public output-selector contract, async/sync text-generation output-selector parity, video generation endpoints, the public local vision-cache catalog helper used by Runtime discovery, vision adapter discovery plus batch/LoRA media controls, and the released shared workspace/file-filter utility surface used by Runtime packaging and integration checks.
20
20
 
21
21
  The base install also includes the remote-light media/capability plugins needed
22
22
  for AbstractCore's multimodal `generate(..., output=...)` path. Local
@@ -922,7 +922,9 @@ except core.HostActionRefused as refused:
922
922
  - Chat compaction summarizes a run with the model the run uses. Only a run with no model of its own is summarized with the current default model; the summarizer does not keep the model that was the default at startup.
923
923
  - A load with `ttl_s` or `keep_alive` for an in-process model, or for a model that is already loaded, lists them under `unsupported_options` with a warning. A load that fails part-way unloads what it loaded.
924
924
  - Changing a capability default (image, voice, music) unloads the models the old capability routes had loaded before the new routes take effect.
925
- - MLX has no idle or time-based unload. A load with `ttl_s` or `keep_alive` on MLX reports them under `unsupported_options`, with a warning, and the model stays loaded until it is unloaded.
925
+ - An in-process model (MLX, transformers, GGUF) has no per-load TTL: a load with `ttl_s` or `keep_alive` reports them under `unsupported_options`, with a warning. AbstractCore's idle unload applies instead (ADR 0012): a model no call has used for the idle-unload time (60 minutes by default) is unloaded; a locked model never is, and a running call is never interrupted. The next call loads it again.
926
+ - `set_model_idle_unload(seconds)` (host facade and both local clients) sets that time for the process; `None` or `0` turns it off. A refused value (negative, not a number) answers `ok: false` and leaves the setting unchanged. Local residency rows of in-process text models carry `idle_unload_s`, `last_used_at` and `idle_unload_at` (epoch seconds; `None` when the setting is off, the model is locked or a call is running), and Core's `in_use` (a call is running on it) and `locked_by` (the owners whose lock keeps it loaded, other accounts included), passed through unchanged.
927
+ - `set_model_residency_locks(locks)` makes the locked models exactly `locks` (`[{"provider", "model"}]`): listed models that are resident are locked, missing ones are loaded then locked, the others are unlocked; each pair reports its own outcome. A lock names a provider and a model; the `base_url` of a configured endpoint is not part of the key. A host stores its "Keep loaded" set and calls it at start. Both setters are `set_` names, so a host that rebuilds its client (the gateway's model host after a restart) replays them.
926
928
 
927
929
  ## Model residency locks and context estimates
928
930