AbstractRuntime 0.15.2__tar.gz → 0.15.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/CHANGELOG.md +17 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/PKG-INFO +9 -2
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/README.md +8 -1
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/llms-full.txt +8 -1
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/llms.txt +1 -1
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/pyproject.toml +1 -1
- abstractruntime-0.15.3/release-notes.md +14 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/json_files.py +75 -12
- abstractruntime-0.15.3/tests/test_json_file_run_store_change_token_after_build.py +131 -0
- abstractruntime-0.15.2/release-notes.md +0 -11
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/.gitignore +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/CODE_OF_CONDUCT.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/LICENSE +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/ROADMAP.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/SECURITY.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0008_integration_facades_are_the_complete_host_surface.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0010_one_replay_many_views.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/0011_memory_facade_is_the_complete_host_surface_for_abstractmemory.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/adr/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/api.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/architecture.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/artifacts.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/automations.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0846_mlx_instance_scheduling_and_execution_controls.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0847_automations_v1_controller_contracts_occurrences_triggers.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0851_per_account_voice_stores.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0852_capability_refusals_are_not_retried.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0855_prefix_stability_contract_of_consecutive_llm_calls.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0856_memory_facade_and_ledger_provenance.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0862_is_empty_accepts_lists.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/0863_index_build_never_loses_a_run_created_during_it.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0070_standalone_wui_browser_session_security_contract.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0233_real_run_cancellation.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/026_context_checkpoint_self_compression.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/027_quote_provenance_discipline.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/028_selective_artifact_rehydration.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0845_session_prompt_cache_resume_and_purge_contract.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0848_automations_v2_external_event_inbox_and_run_triggers.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0853_session_tool_policy_before_the_approval_wait.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0854_replay_view.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0857_entity_direct_memory_writes_provenance.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0858_typed_runs_run_type_stamped_at_start.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/0859_replay_view_ephemeral_text_deltas.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_portability/0065_portable_process_and_lock_layer.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_portability/0066_portable_io_and_media_reader.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_portability/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0044_meta_analysis_record.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0045_crash_replay_harness_and_ordering_invariant.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0046_per_run_driver_exclusion.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0047_indexed_idempotency_lookup.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0048_durable_io_unification.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0049_llm_client_mechanical_split.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0050_control_sidecar_all_writers.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0051_runtime_owned_durable_event_mailbox.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0052_sync_store_event_loop_tripwire.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0053_bounded_run_vars_growth.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0054_runtime_health_counters.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0055_jsonl_store_honesty.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0064_prompt_cache_fingerprint_stability.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0067_durable_write_discipline.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/0068_hot_path_store_reads.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/planned/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0069_document_renderer_professional_figures.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0849_conversation_search_tool_usage_outputs_and_thinking.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0850_growing_automation_history_out_of_the_controller_ledger.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0860_replay_view_stop_wording_from_the_ledger.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0861_replay_view_activity_tool_sandbox_and_call_timings.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/0862_replay_view_message_artifacts_exclude_bookkeeping.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0056_schema_version_and_quarantine_loading.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0057_trust_boundary_stamp_registry.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0058_terminal_run_archival_helper.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0059_memory_span_handler_extraction.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0060_visualflow_compiler_decomposition.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0061_root_api_deprecation_machinery.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0062_dependency_honesty_extras.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/0063_b3_envelope_lane_unification.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/proposed/runtime_systemic_reliability/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/email.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/entity-runtime.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/evidence.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/faq.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/getting-started.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/integrations/abstractcore.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/integrations/abstractmemory.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/limits.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/manual_testing.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/proposal.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/provenance.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/replay.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/snapshots.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/tool-approval.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/tools-comms.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/troubleshooting.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/05_persistence.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/examples/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/mkdocs.yml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/pytest.ini +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/scripts/backfill_diary_edges.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/scripts/generate_llms_full.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/scripts/regen_replay_conformance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automation_queries.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/adapters.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/attention.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/bundle.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/bundles/automation-controller/flows/controller.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/bundles/automation-controller/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/commands.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/consumers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/controller.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/ledger.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/models.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/samples.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/service.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/automations/wakes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/conversation_search.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/effect_cancellation.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/health.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/live_deltas.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/progress_channel.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/publish.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/run_attribution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/run_identity.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/run_lifecycle.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/run_origin.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/runtime.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/step_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/tool_scope.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/documents/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/documents/charts.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/documents/docx.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/documents/pdf.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/actions.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/automations.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/binding.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/feeder.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/frame.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/email/inbox.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/history_bundle.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/act_only.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/chat.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/communities.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/diary.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/digest.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/entity_runtime.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/lease.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/life.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/memory_reader.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/night_voice.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/phase_graph.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/phase_spec.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/prelude.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/prompt_overlay.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/reflection.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/spec/entity_phases.vendored.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/substrate.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/tool_effects.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/tool_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/tools.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/identity/visit_workflow.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/agora_tools.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/command_sandbox_host.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/config_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/data_registry_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/email_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/factory.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/llm_client.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/local_helper_tools.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/mcp_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/output_specs.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/run_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/server_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/structured_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/tool_effects.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/tool_inventory_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/voice_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/voice_library.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractmemory/brain_handlers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractmemory/identity_support.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractmemory/memory_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/integrations/abstractmemory/seam_handlers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/mail_verbs.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a2_delegated_approval_completed/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a_delegated_child_approval/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a_delegated_child_approval/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a_delegated_child_approval/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/a_delegated_child_approval/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/b_timer_without_resume/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/b_timer_without_resume/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/b_timer_without_resume/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/b_timer_without_resume/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/c_parallel_tool_batch/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/d_cancellation/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/d_cancellation/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/d_cancellation/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/d_cancellation/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e2_structured_repeated_node/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e_structured_output_agents/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e_structured_output_agents/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e_structured_output_agents/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/e_structured_output_agents/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/f_windowed_slim/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/f_windowed_slim/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/f_windowed_slim/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/f_windowed_slim/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/g_ask_user/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/g_ask_user/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/g_ask_user/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/g_ask_user/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/h_denied_approval/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/h_denied_approval/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/h_denied_approval/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/h_denied_approval/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/i_wait_kinds/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/i_wait_kinds/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/i_wait_kinds/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/i_wait_kinds/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/j_event_answered_then_pause/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/k_nested_delegation/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/k_nested_delegation/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/k_nested_delegation/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/k_nested_delegation/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/l_answer_then_completion/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/l_answer_then_completion/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/l_answer_then_completion/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/l_answer_then_completion/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/m_session_tool_policy/expected_view.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/m_session_tool_policy/manifest.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/m_session_tool_policy/records.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/conformance/m_session_tool_policy/runs.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/delta.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/executions.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/replay/view.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/scheduler/multi_store.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/session_history.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/session_turns.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/artifacts.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/change_ring.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/lease.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/ledger_slim.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/serialize.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/session_tool_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/storage/steer_sidecar.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/cloudevents.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/connection_events.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/connections.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/email_received.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/event_frame.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/feed.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/manual.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/protocol.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/schedule.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/triggers/webhook.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/turn_grounding.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/utils/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/utils/atomic_files.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/utils/file_filters.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/utils/workspace_paths.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/compiler.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/builtins.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/executor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/function_library.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/loop_back_check.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/loop_limit_lowering.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/pin_expressions.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/visualflow_compiler/visual/reroute_lowering.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/README.md +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/automation_harness.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/conftest.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/email_wp2_support.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/fixtures/feeds/atom.xml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/fixtures/feeds/rdf-not-a-feed.xml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/fixtures/feeds/rss1-malformed.xml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/fixtures/feeds/rss1.xml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/fixtures/feeds/rss2.xml +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/fixtures/schedule_v1_corpus.json +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/live_email/conftest.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/live_email/live_email_support.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/live_email/test_email_live_runtime.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/media_endpoint_profile_probe.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_comms_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_discovery_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_host_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_run_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_server_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_structured_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_active_consumers_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_active_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_agora_agent_alias_identity.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_agora_tools_http.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_analyze_media_addressing_and_walling.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_artifact_session_candidates.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_artifacts.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_calendar_schedule.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_commands.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_controller.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_controller_recovery.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_definition.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_discussion_isolation.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_email_results.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_growing_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_list_reads.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_named_policy_compiler.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_next_fire.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_occurrence_input_resolver.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_occurrence_recovery.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_replay_read_only.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_retry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_session_turns.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_status.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_automation_tool_approval.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_browser_probe_target_walling.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_budget_law_no_unrequested_caps.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_capability_default_reasoning.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_code_node_imports.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_code_node_restricted_python.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_command_sandbox_host_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_command_store.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_compaction_summarizer_route.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_config_facade_models_engines.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_config_facade_voice_input_hint.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_controller_bundle_packaged.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_conversation_search.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_crash_ordering_inversions.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_create_if_absent.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_data_registry_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_model_warmup_switch.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_tools_camera_gating.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_tools_include_skim_web.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_diary_capture.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_diary_write_rescue.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_directory_lease.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_disabled_toolsets_seam.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_discovery_survives_unbuildable_default.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_discovery_tts_unavailable_reason.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_discovery_voice_openai_api_key.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_discussion_session_anchor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_document_markdown_tables.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_document_renderers_hr_quote.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_durable_write_discipline.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_effect_cancellation.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_effect_issuance_idempotency.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_effect_payload_stays_json_serializable.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_election_consequence_teaching.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_binding_and_refiner.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_feeder_batched.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_feeder_flags.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_gate_fixes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_inbox_and_trigger.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_received_mailbox_id.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_regate_fixes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_review_fixes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_self_trigger_loop.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_stream_consumers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_email_toolset_and_walls.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_emergence_experiment.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_emit_event_uses_wait_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_endpoint_profile_media_end_to_end.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_endpoint_profile_media_in_process.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_endpoint_profile_media_specs_keep_provider.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_endpoint_profile_route_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_awake_memory_fixes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_brain_effects.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_chat_driver.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_chat_tools_reflection.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_diary.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_execute_tool.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_fetch_url_tool.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_history_window.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_life_loop.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_memory_richness.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_phase_graph_conformance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_react_visit_window.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_recent_memories.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_runtime.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_search_memory.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_sleep_bound_and_yield_attribution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_substrate_resolution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_visit_honesty.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_workspace_cap.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_entity_workspace_tools.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_event_index_cross_process.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_event_wait_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_every_path_bearing_tool_is_walled.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_evidence_recorder_post_policy_envelope.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_execute_command_output_offload.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_execution_capability_discovery.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_explicit_eject_other_clients.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_factory_default_retry_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_format_repair_nudge.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_fresh_install_no_provider.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_gateway_facades_c4899.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_git_read_only_refiner.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_hf_process_residency_merge.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_history_window_multimodal.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_hot_path_store_reads.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_indexed_idempotency_lookup.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_json_file_run_store_index_build_race.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_json_run_cache_bound.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_json_store_scan_memo.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_jsonl_ledger_seq_cross_process.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_jsonl_row_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_ledger_cursor_invariants.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_ledger_get_record.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_ledger_record_slimming.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_live_token_deltas.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_payload_shape_refusal.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_prefix_stability_contract.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_response_schema_normalization.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_text_phase_progress.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_client_grounding_tail.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_client_system_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_retry_classification.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_llm_streaming_on_token.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_local_helper_tool_exposure.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_local_residency_host_sweep.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mail_verbs.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mailbox_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_max_iterations_ceiling.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mcp_runs_untrusted_and_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_media_artifact_resolution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_media_capability_default_routing.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_media_host_endpoint_resolver.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_media_only_requests_skip_text_client.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_media_subprocess.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_appraise_handler.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_communities.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_revise.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_seam_handlers.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_seam_sqlite_durability.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_step_provenance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_mlx_process_residency_merge.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_model_eject_cancel.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_model_residency_clean_switch.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_model_residency_control_plane.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_model_residency_lock_and_context_estimate.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_multi_store_scheduler.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_multimodal_abstractcore_integration.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_native_mlx_application_wiring.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_native_mlx_execution_controls_live.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_native_tool_channel.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_night_voice.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_no_default_provider_refusal_ux.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_occurrence_named_inputs.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_occurrence_samples.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_offload_answer_chain_c4978.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_offloaded_node_traces_report_unknown_not_zero.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_offloading.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_packaging_extras.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_parallel_readonly_tool_execution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_pdf_unicode_rendering.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_personal_cycle.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_phantom_attachment_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_phase_graph_artifact_control.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_phase_graph_obedience.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_phase_vocabulary_migration.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_pooled_client_strips_construction_cache_key.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_prompt_cache_export_import.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_prompt_cache_fingerprint_stability.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_prompt_cache_posture_inheritance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_prompt_cache_thinking_and_prompt_only.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_prompt_overlay.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_provider_endpoint_profile_resolution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_provider_pin_routing_isolation.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_publish_event.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_r12_workspace_sandbox.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_read_idle_threading.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_readoption_experiment.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_realize_election.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_remote_client_cancel.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_remote_speculation_defaults.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_conformance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_conformance_package.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_cursor_token.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_delta_cost.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_invariants.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_review_findings.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_replay_tool_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_report_branding.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_resident_media_generation.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_resume_concurrent_same_wait.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_history_bundle.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_index_workspace_root.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_mutation_lock.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_origin.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_scoped_tool_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_store_change_token.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_run_tool_scope_ceiling.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_browser_session_boundary.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_default_provider_model_refresh.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_effect_invocation_trace.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_health_and_bounded_vars.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_llm_call_grounding_in_ledger.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_runtime_tick_step_gate.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_schedule_run.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_schedule_v1_corpus.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_schedule_v2_calendar.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_send_email_refiner.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_send_email_self_default_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_attachments_registry_and_open_tool.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_history.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_prompt_cache_attribution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_prompt_cache_visibility.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_route_stamp.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_start_cost.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_session_tool_policy.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_shell_tool_exposure.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_speculation_inheritance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_speculation_reaches_provider_construction.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_steer_sidecar.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_step_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_storage_deletion.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_streamed_voice_namespace.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_thinking_inheritance.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_approval_wait_key_identity.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_catalog.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_descriptor_registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_inventory_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_invoke_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_policy_and_mounts.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_topic_election_world_model.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_cloudevents.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_connection_listening.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_connections.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_feed.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_schedule_math.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trigger_webhook.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_trusted_run_index.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_turn_grounding_byte_stability.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_turn_grounding_carriers_a3.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visit_ab_fixture.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visit_midturn_elections.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visit_midturn_resume.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visit_workflow.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_agent_output_context_includes_messages.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_agent_skills_block_passthrough.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_entity_memory_nodes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_flow_end_effect_only_persistence.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_llm_call_partial_override.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_loop_back_out_of_body.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_loop_limit_and_list_nodes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_loop_limit_on_wire.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_reroute_lowering.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_set_vars_pins.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_unknown_node_type_refuses.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visual_wait_event_deadline_passthrough.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_agora_react_agent.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_capability_routes_and_thinking.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_continue_on_error.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_edit_json_schema_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_event_inbox_react_agent.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_file_nodes_workspace.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_function_library.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_get_var_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_llm_call_multimodal_output.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_media_nodes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_pin_expressions.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_prompt_only.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_schema_enum_switch.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_string_contains_replace.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_voice_library_facade.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_voice_openai_api_key_path.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_voice_stream_is_not_a_wait.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_w4_feelings_lens.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_wait_event_deadline.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_wait_until_streak.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_wait_until_utc_normalization.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_builtin_deny.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_context_allowed_workspaces.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_policy_absolute_reanchor.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_policy_mount_virtual_paths.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_prompt_context.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_read_only.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_workspace_writable_paths.py +0 -0
- {abstractruntime-0.15.2 → abstractruntime-0.15.3}/tests/test_write_chart.py +0 -0
|
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.15.3] - 2026-10-29
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **An index build no longer announces its journal replay as changes** (`JsonFileRunStore`; a 0.15.2 regression).
|
|
15
|
+
0.15.2's first sync after a build re-applies the journal tail before the build's mark (backlog 0863) and noted every
|
|
16
|
+
replayed record on the change ring: a plain read (`list_run_index`, `warm_session_index`) moved `change_token` and
|
|
17
|
+
`changed_run_ids` then named every run in the tail as changed, so a change-driven consumer re-read every run after
|
|
18
|
+
each build (the gateway's mail notification check loaded all 400 finished runs of its index test on every full
|
|
19
|
+
pass: AbstractGateway backlog 0965, red CI since 0.15.2). Replayed records are still filed into the session,
|
|
20
|
+
children and active indexes (the 0863 guarantee stands). A replay is quiet only when it says nothing new: its file
|
|
21
|
+
was known to the store at the build's mark (the scan memo, the sidecar included) and is unchanged since; a file
|
|
22
|
+
that landed or changed during the build (the record precedes the file, J53-1), a known run now gone, and every
|
|
23
|
+
record after the mark are announced as before, so a consumer whose token already covers the record still learns
|
|
24
|
+
of it; a store with no sidecar announces its first replay (a bounded one-off). Tests:
|
|
25
|
+
`tests/test_json_file_run_store_change_token_after_build.py` (red on 0.15.2).
|
|
26
|
+
|
|
10
27
|
## [0.15.2] - 2026-10-28
|
|
11
28
|
|
|
12
29
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.15.
|
|
3
|
+
Version: 0.15.3
|
|
4
4
|
Summary: AbstractRuntime: a durable graph runner designed to pair with AbstractCore.
|
|
5
5
|
Project-URL: AbstractCore (website), https://www.abstractcore.ai/
|
|
6
6
|
Project-URL: AbstractRuntime (GitHub), https://github.com/lpalbou/abstractruntime
|
|
@@ -55,10 +55,17 @@ Description-Content-Type: text/markdown
|
|
|
55
55
|
|
|
56
56
|
It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
|
|
57
57
|
|
|
58
|
-
**Version:** 0.15.
|
|
58
|
+
**Version:** 0.15.3 • **Python:** 3.10+
|
|
59
59
|
|
|
60
60
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
61
61
|
|
|
62
|
+
## What's new in 0.15.3
|
|
63
|
+
|
|
64
|
+
- **A run-store index build no longer announces its journal replay as changes**: a plain read (`list_run_index`,
|
|
65
|
+
`warm_session_index`) leaves `change_token` and `changed_run_ids` untouched, so a change-driven consumer (the
|
|
66
|
+
gateway's mail notification check) no longer re-reads every finished run after each build (a 0.15.2 regression;
|
|
67
|
+
AbstractGateway backlog 0965). A file that landed during the build and a known run that vanished are still announced.
|
|
68
|
+
|
|
62
69
|
## What's new in 0.15.2
|
|
63
70
|
|
|
64
71
|
- **Run index builds never lose a run created during them**: a run another process (or store object) wrote while
|
|
@@ -4,10 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
|
|
6
6
|
|
|
7
|
-
**Version:** 0.15.
|
|
7
|
+
**Version:** 0.15.3 • **Python:** 3.10+
|
|
8
8
|
|
|
9
9
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
10
10
|
|
|
11
|
+
## What's new in 0.15.3
|
|
12
|
+
|
|
13
|
+
- **A run-store index build no longer announces its journal replay as changes**: a plain read (`list_run_index`,
|
|
14
|
+
`warm_session_index`) leaves `change_token` and `changed_run_ids` untouched, so a change-driven consumer (the
|
|
15
|
+
gateway's mail notification check) no longer re-reads every finished run after each build (a 0.15.2 regression;
|
|
16
|
+
AbstractGateway backlog 0965). A file that landed during the build and a known run that vanished are still announced.
|
|
17
|
+
|
|
11
18
|
## What's new in 0.15.2
|
|
12
19
|
|
|
13
20
|
- **Run index builds never lose a run created during them**: a run another process (or store object) wrote while
|
|
@@ -55,10 +55,17 @@ See llms.txt for the linked index.
|
|
|
55
55
|
|
|
56
56
|
It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
|
|
57
57
|
|
|
58
|
-
**Version:** 0.15.
|
|
58
|
+
**Version:** 0.15.3 • **Python:** 3.10+
|
|
59
59
|
|
|
60
60
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
61
61
|
|
|
62
|
+
## What's new in 0.15.3
|
|
63
|
+
|
|
64
|
+
- **A run-store index build no longer announces its journal replay as changes**: a plain read (`list_run_index`,
|
|
65
|
+
`warm_session_index`) leaves `change_token` and `changed_run_ids` untouched, so a change-driven consumer (the
|
|
66
|
+
gateway's mail notification check) no longer re-reads every finished run after each build (a 0.15.2 regression;
|
|
67
|
+
AbstractGateway backlog 0965). A file that landed during the build and a known run that vanished are still announced.
|
|
68
|
+
|
|
62
69
|
## What's new in 0.15.2
|
|
63
70
|
|
|
64
71
|
- **Run index builds never lose a run created during them**: a run another process (or store object) wrote while
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Durable workflow runtime (interrupt → checkpoint → resume) with an append-only execution ledger.
|
|
4
4
|
|
|
5
5
|
- Python: 3.10+ (see `pyproject.toml`)
|
|
6
|
-
- Version: 0.15.
|
|
6
|
+
- Version: 0.15.3
|
|
7
7
|
- Ecosystem: [AbstractFramework](https://github.com/lpalbou/AbstractFramework) umbrella, integrates with [AbstractCore](https://github.com/lpalbou/abstractcore)
|
|
8
8
|
- Hard invariant: `RunState.vars` must be JSON-serializable (`src/abstractruntime/core/models.py`)
|
|
9
9
|
- Current AbstractCore baseline: base `abstractruntime` requires AbstractCore 2.30.0 or newer with its light install (remote providers, tools and the MCP worker, media routing); `abstractruntime[apple]` and `abstractruntime[gpu]` require AbstractCore's `apple` and `gpu` settings (`pyproject.toml`)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
### Fixed
|
|
2
|
+
|
|
3
|
+
- **An index build no longer announces its journal replay as changes** (`JsonFileRunStore`; a 0.15.2 regression).
|
|
4
|
+
0.15.2's first sync after a build re-applies the journal tail before the build's mark (backlog 0863) and noted every
|
|
5
|
+
replayed record on the change ring: a plain read (`list_run_index`, `warm_session_index`) moved `change_token` and
|
|
6
|
+
`changed_run_ids` then named every run in the tail as changed, so a change-driven consumer re-read every run after
|
|
7
|
+
each build (the gateway's mail notification check loaded all 400 finished runs of its index test on every full
|
|
8
|
+
pass: AbstractGateway backlog 0965, red CI since 0.15.2). Replayed records are still filed into the session,
|
|
9
|
+
children and active indexes (the 0863 guarantee stands). A replay is quiet only when it says nothing new: its file
|
|
10
|
+
was known to the store at the build's mark (the scan memo, the sidecar included) and is unchanged since; a file
|
|
11
|
+
that landed or changed during the build (the record precedes the file, J53-1), a known run now gone, and every
|
|
12
|
+
record after the mark are announced as before, so a consumer whose token already covers the record still learns
|
|
13
|
+
of it; a store with no sidecar announces its first replay (a bounded one-off). Tests:
|
|
14
|
+
`tests/test_json_file_run_store_change_token_after_build.py` (red on 0.15.2).
|
|
@@ -188,6 +188,16 @@ class JsonFileRunStore(RunStore):
|
|
|
188
188
|
self._journal_path = self._base / ".runs_created.log"
|
|
189
189
|
self._journal_lock = threading.Lock()
|
|
190
190
|
self._journal_offset: Optional[int] = None
|
|
191
|
+
# The journal's size when an index build marked it (`_mark_journal_start`): records
|
|
192
|
+
# before it are REPLAYED by the first sync (filed into the indexes, nothing announced:
|
|
193
|
+
# they predate the build's scan, which already read their files, or are this store's own
|
|
194
|
+
# saves, announced when they happened). Only records after it are changes.
|
|
195
|
+
self._journal_replay_mark: int = 0
|
|
196
|
+
# What this store knew when it marked: {run id: file identity token} from the scan memo
|
|
197
|
+
# (the sidecar included). A replayed record is quiet only for a file known then and
|
|
198
|
+
# unchanged since; anything else (a file that landed or changed during the build, a known
|
|
199
|
+
# run now gone) is announced like any change.
|
|
200
|
+
self._journal_replay_known: Dict[str, tuple] = {}
|
|
191
201
|
from collections import deque as _deque
|
|
192
202
|
|
|
193
203
|
self._journal_own_appends: Any = _deque(maxlen=8192)
|
|
@@ -747,10 +757,17 @@ class JsonFileRunStore(RunStore):
|
|
|
747
757
|
"""Called BEFORE an index's full scan: entries appended from here on
|
|
748
758
|
are re-applied by `_sync_indexes` (idempotent), so nothing created
|
|
749
759
|
during the scan is lost."""
|
|
760
|
+
if self._journal_offset is not None:
|
|
761
|
+
return
|
|
762
|
+
self._load_scan_sidecar_once() # the memo as a restarted store knows it, before the snapshot
|
|
763
|
+
with self._scan_memo_lock:
|
|
764
|
+
known = {rid: tuple(v[0]) for rid, v in self._scan_memo.items()}
|
|
750
765
|
with self._journal_lock:
|
|
751
766
|
if self._journal_offset is None:
|
|
752
767
|
size = self._journal_size()
|
|
753
768
|
self._journal_offset = self._journal_replay_start(size) if size is not None else 0
|
|
769
|
+
self._journal_replay_mark = int(size) if size is not None else 0
|
|
770
|
+
self._journal_replay_known = known
|
|
754
771
|
|
|
755
772
|
def _journal_replay_start(self, size: int) -> int:
|
|
756
773
|
"""Where the first sync after an index build starts reading: the first record boundary
|
|
@@ -824,24 +841,57 @@ class JsonFileRunStore(RunStore):
|
|
|
824
841
|
return
|
|
825
842
|
complete = chunk.rfind(b"\n") + 1 # a line still being written waits for the next sync
|
|
826
843
|
self._journal_offset = offset + complete
|
|
844
|
+
mark = self._journal_replay_mark
|
|
827
845
|
pending = dict(self._journal_pending)
|
|
828
846
|
entries = list(pending.items())
|
|
829
847
|
now = time.time()
|
|
830
|
-
|
|
848
|
+
# A record wholly before the build's mark is a replay (0.15.2): it is filed, never
|
|
849
|
+
# announced as a change (`change_token` / `changed_run_ids` stay put: a read that moved
|
|
850
|
+
# them made every change-driven consumer re-read every run after each build, 0.15.3).
|
|
851
|
+
replayed: set = set()
|
|
852
|
+
announced: set = set()
|
|
853
|
+
pos = offset
|
|
854
|
+
for raw_line in chunk[:complete].split(b"\n"):
|
|
855
|
+
line_end = pos + len(raw_line) + 1
|
|
856
|
+
raw = raw_line.decode("utf-8", "replace")
|
|
831
857
|
op, rid = raw[:1], raw[1:].strip()
|
|
832
858
|
if op in ("+", "-", "~", "=") and rid:
|
|
833
859
|
entries.append((rid, (op, now)))
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
860
|
+
(replayed if line_end <= mark else announced).add(rid)
|
|
861
|
+
pos = line_end
|
|
862
|
+
self._apply_journal_entries(entries, quiet=replayed - announced)
|
|
863
|
+
if offset + complete >= mark:
|
|
864
|
+
self._journal_replay_known = {} # the replay is over: later records are all new
|
|
865
|
+
|
|
866
|
+
def _apply_journal_entries(self, entries: Any, *, quiet: Any = frozenset()) -> None:
|
|
867
|
+
"""`quiet`: run ids whose records are replays (an index build's tail). A replay is filed
|
|
868
|
+
without a change-ring note only when it says nothing new: its file was known at the mark
|
|
869
|
+
(`_journal_replay_known`) and is unchanged since; a known run now gone IS announced. A file
|
|
870
|
+
that landed or changed during the build (J53-1: the record precedes the file) is announced
|
|
871
|
+
like any change, so a consumer whose token already covers the record still learns of it."""
|
|
837
872
|
cutoff = time.time() - float(self.STALE_TEMP_AGE_S)
|
|
838
873
|
for rid, (op, since) in entries:
|
|
874
|
+
note = rid not in quiet
|
|
839
875
|
p = self._path(rid)
|
|
840
876
|
exists = p.exists()
|
|
877
|
+
if not note:
|
|
878
|
+
known = self._journal_replay_known.get(rid)
|
|
879
|
+
if exists:
|
|
880
|
+
try:
|
|
881
|
+
unchanged = known is not None and tuple(known) == tuple(self._stat_token(p.stat()))
|
|
882
|
+
except OSError:
|
|
883
|
+
unchanged = False
|
|
884
|
+
note = not unchanged
|
|
885
|
+
else:
|
|
886
|
+
with self._scan_memo_lock:
|
|
887
|
+
in_memo = rid in self._scan_memo
|
|
888
|
+
with self._active_lock:
|
|
889
|
+
in_active = rid in self._active
|
|
890
|
+
note = known is not None or in_memo or in_active
|
|
841
891
|
if op in ("+", "~", "=") and exists:
|
|
842
892
|
fields = self._scan_fields(p)
|
|
843
893
|
if fields is not None:
|
|
844
|
-
self._index_fields_into_indexes(rid, fields)
|
|
894
|
+
self._index_fields_into_indexes(rid, fields, note=note)
|
|
845
895
|
# `~` announces a flip TO active: until the file says so it is
|
|
846
896
|
# not resolved (the writer's replace may land after its line).
|
|
847
897
|
# `=` is written AFTER its file was published: one read resolves it.
|
|
@@ -849,7 +899,7 @@ class JsonFileRunStore(RunStore):
|
|
|
849
899
|
elif op == "-" and not exists:
|
|
850
900
|
self._drop_from_children_index(rid)
|
|
851
901
|
self._drop_from_session_index(rid)
|
|
852
|
-
self._forget_active(rid)
|
|
902
|
+
self._forget_active(rid, note=note)
|
|
853
903
|
self._memo_pop(rid)
|
|
854
904
|
resolved = True
|
|
855
905
|
elif op == "=":
|
|
@@ -862,7 +912,7 @@ class JsonFileRunStore(RunStore):
|
|
|
862
912
|
else:
|
|
863
913
|
self._journal_pending[rid] = (op, since)
|
|
864
914
|
|
|
865
|
-
def _index_fields_into_indexes(self, rid: str, fields: Dict[str, Any]) -> None:
|
|
915
|
+
def _index_fields_into_indexes(self, rid: str, fields: Dict[str, Any], *, note: bool = True) -> None:
|
|
866
916
|
parent = fields.get("parent_run_id")
|
|
867
917
|
parent = str(parent) if parent else None
|
|
868
918
|
with self._index_lock:
|
|
@@ -875,7 +925,7 @@ class JsonFileRunStore(RunStore):
|
|
|
875
925
|
if self._session_index is not None and sid:
|
|
876
926
|
self._session_index.setdefault(sid, {})[rid] = fields.get("session_kind")
|
|
877
927
|
self._run_session[rid] = sid
|
|
878
|
-
self._note_active_status(rid, fields.get("status"))
|
|
928
|
+
self._note_active_status(rid, fields.get("status"), note=note)
|
|
879
929
|
|
|
880
930
|
def warm_session_index(self) -> None:
|
|
881
931
|
"""Build the session and children indexes now (host boot), so the
|
|
@@ -1267,24 +1317,37 @@ class JsonFileRunStore(RunStore):
|
|
|
1267
1317
|
e = self._active[rid] = _ActiveEntry()
|
|
1268
1318
|
return e
|
|
1269
1319
|
|
|
1270
|
-
def _note_active_status(self, rid: str, status: Any) -> None:
|
|
1320
|
+
def _note_active_status(self, rid: str, status: Any, *, note: bool = True) -> None:
|
|
1271
1321
|
"""Record what a save, a journal line or a verified read says about a
|
|
1272
1322
|
run. Always recorded (before the first build too): a scan in progress
|
|
1273
1323
|
merges by generation, a build not yet started reads disk truth and
|
|
1274
|
-
reconciles these notes with it.
|
|
1324
|
+
reconciles these notes with it.
|
|
1325
|
+
|
|
1326
|
+
`note=False` (a replayed journal record, `_apply_journal_entries`): the
|
|
1327
|
+
membership is kept right, but nothing is announced: no sequence bump,
|
|
1328
|
+
no change-ring entry, so `change_token` does not move for a read."""
|
|
1275
1329
|
if not rid:
|
|
1276
1330
|
return
|
|
1277
1331
|
with self._active_lock:
|
|
1332
|
+
existed = rid in self._active
|
|
1278
1333
|
e = self._active_entry(rid)
|
|
1334
|
+
active = self._is_active_status(status)
|
|
1335
|
+
if not note and (not existed or e.active == active):
|
|
1336
|
+
# A replay of a file known at the mark and unchanged since: filed, not announced
|
|
1337
|
+
# (an existing entry whose active flag FLIPS is a change, announced below).
|
|
1338
|
+
e.active = active
|
|
1339
|
+
return
|
|
1340
|
+
e.active = active
|
|
1279
1341
|
self._active_seq += 1
|
|
1280
1342
|
e.gen = self._active_seq
|
|
1281
|
-
e.active = self._is_active_status(status)
|
|
1282
1343
|
self._change_ring.note(self._active_seq, rid)
|
|
1283
1344
|
|
|
1284
|
-
def _forget_active(self, rid: str) -> None:
|
|
1345
|
+
def _forget_active(self, rid: str, *, note: bool = True) -> None:
|
|
1285
1346
|
"""The run is gone (deleted here, or a `-id` line): drop its record."""
|
|
1286
1347
|
with self._active_lock:
|
|
1287
1348
|
self._active.pop(rid, None)
|
|
1349
|
+
if not note:
|
|
1350
|
+
return
|
|
1288
1351
|
self._active_seq += 1
|
|
1289
1352
|
self._change_ring.note(self._active_seq, rid)
|
|
1290
1353
|
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"""An index build (the first `list_run_index` / `warm_session_index` of a store) replays the
|
|
2
|
+
journal tail before its mark (0.15.2, backlog 0863) WITHOUT announcing those records as changes:
|
|
3
|
+
`change_token` does not move for a read and `changed_run_ids` names nothing. In 0.15.2 the replay
|
|
4
|
+
noted every replayed `+id` on the change ring, so after each build a change-driven consumer (the
|
|
5
|
+
gateway's mail notification check) saw every finished run as changed and loaded them all
|
|
6
|
+
(AbstractGateway backlog 0965: `test_400_finished_runs_a_change_to_one_loads_exactly_one`)."""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
from abstractruntime.core.models import RunState, RunStatus
|
|
13
|
+
from abstractruntime.storage.json_files import JsonFileRunStore
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _run(rid: str, status: RunStatus, i: int) -> RunState:
|
|
17
|
+
return RunState(run_id=rid, workflow_id="w", status=status, current_node="n", vars={}, actor_id="t",
|
|
18
|
+
updated_at=f"2020-01-01T00:{i // 60:02d}:{i % 60:02d}+00:00")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_an_index_build_does_not_move_the_change_token(tmp_path: Path) -> None:
|
|
22
|
+
store = JsonFileRunStore(tmp_path / "runs")
|
|
23
|
+
for i in range(400):
|
|
24
|
+
store.save(_run(f"done-{i:03d}", RunStatus.COMPLETED if i % 2 else RunStatus.FAILED, i))
|
|
25
|
+
token = store.change_token()
|
|
26
|
+
assert len(store.list_run_index(status=RunStatus.COMPLETED, limit=200)) == 200
|
|
27
|
+
assert len(store.list_run_index(status=RunStatus.FAILED, limit=200)) == 200
|
|
28
|
+
store.warm_session_index()
|
|
29
|
+
assert store.change_token() == token, "a read moved the change token"
|
|
30
|
+
assert store.changed_run_ids(token) == set(), "a read announced runs as changed"
|
|
31
|
+
|
|
32
|
+
# A real change after the build is still announced (this store), or unknown (another process).
|
|
33
|
+
store.save(_run("done-400", RunStatus.COMPLETED, 400))
|
|
34
|
+
assert store.changed_run_ids(token) == {"done-400"}
|
|
35
|
+
token2 = store.change_token()
|
|
36
|
+
JsonFileRunStore(tmp_path / "runs").save(_run("foreign", RunStatus.COMPLETED, 401))
|
|
37
|
+
assert store.changed_run_ids(token2) is None
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def test_a_run_another_store_created_before_the_mark_is_still_filed_by_the_replay(tmp_path: Path) -> None:
|
|
41
|
+
"""The 0.15.2 guarantee (backlog 0863) survives: the replay files a run whose `+` line
|
|
42
|
+
landed before the mark; it only stops announcing it."""
|
|
43
|
+
writer = JsonFileRunStore(tmp_path / "runs")
|
|
44
|
+
for i in range(20):
|
|
45
|
+
writer.save(_run(f"r-{i:02d}", RunStatus.COMPLETED, i))
|
|
46
|
+
reader = JsonFileRunStore(tmp_path / "runs")
|
|
47
|
+
token = reader.change_token()
|
|
48
|
+
writer.save(RunState(run_id="late", workflow_id="w", status=RunStatus.WAITING, current_node="n", vars={},
|
|
49
|
+
actor_id="t", session_id="s1"))
|
|
50
|
+
reader.warm_session_index()
|
|
51
|
+
rows = reader.list_run_index(session_id="s1", limit=10)
|
|
52
|
+
assert [r["run_id"] for r in rows] == ["late"]
|
|
53
|
+
assert "late" in {r["run_id"] for r in reader.list_run_index(status=RunStatus.WAITING, limit=10)}
|
|
54
|
+
# Another process wrote the journal: the change set is unknown, never silently empty.
|
|
55
|
+
assert reader.changed_run_ids(token) is None
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _publish_without_a_journal_line(src_dir: Path, dest_store: JsonFileRunStore, run: RunState) -> None:
|
|
59
|
+
"""A run file landing in the folder with no new journal record: its `+id` was appended earlier
|
|
60
|
+
(J53-1: the line goes first, the file after), here by a store in another folder."""
|
|
61
|
+
import shutil
|
|
62
|
+
|
|
63
|
+
JsonFileRunStore(src_dir).save(run)
|
|
64
|
+
shutil.copyfile(src_dir / f"run_{run.run_id}.json", dest_store._base / f"run_{run.run_id}.json.tmp")
|
|
65
|
+
(dest_store._base / f"run_{run.run_id}.json.tmp").replace(dest_store._base / f"run_{run.run_id}.json")
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def test_a_run_published_during_the_scan_is_announced_by_the_replay(tmp_path: Path) -> None:
|
|
69
|
+
"""Review (DESK1): the replay is quiet only for what the store knew before the build's mark. A
|
|
70
|
+
`+X` appended before the mark whose file lands DURING the scan (the J53-1 window: line first,
|
|
71
|
+
file after) must still be announced: a consumer whose token already covers that line would
|
|
72
|
+
otherwise never learn of X. The file lands on the scan's first file read, so the scan's own
|
|
73
|
+
sync replays `+X` with the file present (the pending re-check never sees it)."""
|
|
74
|
+
writer = JsonFileRunStore(tmp_path / "runs")
|
|
75
|
+
for i in range(20):
|
|
76
|
+
writer.save(_run(f"r-{i:02d}", RunStatus.COMPLETED, i))
|
|
77
|
+
writer._persist_scan_memo() # the sidecar: what a restarted store knows at its mark
|
|
78
|
+
reader = JsonFileRunStore(tmp_path / "runs")
|
|
79
|
+
writer._journal_append("+late") # the line, before the file (another process mid-save)
|
|
80
|
+
token = reader.change_token() # covers the `+late` line already
|
|
81
|
+
real = reader._scan_fields
|
|
82
|
+
landed = {"done": False}
|
|
83
|
+
|
|
84
|
+
def scan_fields(p):
|
|
85
|
+
if not landed["done"]:
|
|
86
|
+
landed["done"] = True
|
|
87
|
+
_publish_without_a_journal_line(tmp_path / "other", reader, _run("late", RunStatus.COMPLETED, 99))
|
|
88
|
+
return real(p)
|
|
89
|
+
|
|
90
|
+
reader._scan_fields = scan_fields # type: ignore[method-assign]
|
|
91
|
+
reader.warm_session_index() # the build: mark, scan (late lands on the first read), sync
|
|
92
|
+
assert landed["done"]
|
|
93
|
+
assert "late" in {r["run_id"] for r in reader.list_run_index(status=RunStatus.COMPLETED, limit=50)}
|
|
94
|
+
assert reader.changed_run_ids(token) == {"late"}, "a run the store did not know before the mark must be announced"
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def test_a_store_without_a_sidecar_announces_its_first_replay(tmp_path: Path) -> None:
|
|
98
|
+
"""No sidecar, nothing saved by this store: at its mark it knows no file, so the replayed
|
|
99
|
+
records are announced (a bounded one-off: the 16 KiB tail), never silently dropped."""
|
|
100
|
+
writer = JsonFileRunStore(tmp_path / "runs")
|
|
101
|
+
for i in range(20):
|
|
102
|
+
writer.save(_run(f"r-{i:02d}", RunStatus.COMPLETED, i))
|
|
103
|
+
reader = JsonFileRunStore(tmp_path / "runs")
|
|
104
|
+
token = reader.change_token()
|
|
105
|
+
reader.warm_session_index()
|
|
106
|
+
assert reader.changed_run_ids(token) == {f"r-{i:02d}" for i in range(20)}
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def test_a_run_unlinked_during_the_scan_is_announced_by_the_replay(tmp_path: Path) -> None:
|
|
110
|
+
"""A `-X` appended before the mark whose unlink lands right after the scan recorded X: the
|
|
111
|
+
store knew X (its scan), so the replay announces that it is gone."""
|
|
112
|
+
writer = JsonFileRunStore(tmp_path / "runs")
|
|
113
|
+
for i in range(20):
|
|
114
|
+
writer.save(_run(f"r-{i:02d}", RunStatus.COMPLETED, i))
|
|
115
|
+
writer._persist_scan_memo()
|
|
116
|
+
reader = JsonFileRunStore(tmp_path / "runs")
|
|
117
|
+
writer._journal_append("-r-07") # the line, before the unlink
|
|
118
|
+
token = reader.change_token()
|
|
119
|
+
real = reader._scan_fields
|
|
120
|
+
|
|
121
|
+
def scan_fields(p):
|
|
122
|
+
out = real(p)
|
|
123
|
+
if p.name == "run_r-07.json" and p.exists():
|
|
124
|
+
p.unlink() # gone right after the scan recorded it
|
|
125
|
+
return out
|
|
126
|
+
|
|
127
|
+
reader._scan_fields = scan_fields # type: ignore[method-assign]
|
|
128
|
+
reader.warm_session_index() # the build: mark, scan (r-07 recorded, then gone), sync
|
|
129
|
+
assert not (tmp_path / "runs" / "run_r-07.json").exists()
|
|
130
|
+
assert "r-07" not in {r["run_id"] for r in reader.list_run_index(status=RunStatus.COMPLETED, limit=50)}
|
|
131
|
+
assert reader.changed_run_ids(token) == {"r-07"}, "a run gone since the store knew it must be announced"
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
### Fixed
|
|
2
|
-
|
|
3
|
-
- **An index build no longer loses a run another store object creates during it** (`JsonFileRunStore`, backlog 0863).
|
|
4
|
-
A new run's `+` journal line is written before its file is published; a session/children/active index build that
|
|
5
|
-
marked the journal between the two and scanned the folder before the file landed missed the run: the listing until
|
|
6
|
-
the next reconciliation, the session and children indexes for the life of the store object (the reconciliation
|
|
7
|
-
repaired only the listing). Seen as a gateway that answered 404 `session_not_found` when archiving a session written
|
|
8
|
-
while it booted (AbstractGateway backlog 0963); a split-mode runner creating a run during the API process's boot
|
|
9
|
-
hit the same window. The first sync after a build now re-applies the journal's last 16 KiB before the build's mark
|
|
10
|
-
(`JOURNAL_REPLAY_TAIL_BYTES`; idempotent, once per build), and the reconciliation re-files a run it repairs into
|
|
11
|
-
the session and children indexes too (and drops a vanished one from them).
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/001_runtime_kernel.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/003_wait_primitives.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/004_scheduler_driver.md
RENAMED
|
File without changes
|
|
File without changes
|
{abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/006_snapshots_bookmarks.md
RENAMED
|
File without changes
|
|
File without changes
|
{abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/009_artifact_store.md
RENAMED
|
File without changes
|
|
File without changes
|
{abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/completed/011_subworkflow_support.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstractruntime-0.15.2 → abstractruntime-0.15.3}/docs/backlog/deprecated/001_runtime_kernel.md
RENAMED
|
File without changes
|
|
File without changes
|