mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-07 07:22:21 +02:00
Merge frozen lab b1666951 (Wave 3) into Wave 4 effects provenance
Integrates the merged and frozen Wave 3 lab commit b1666951faf8285054e1ca90f11533b0fb53fb57 with a normal merge, preserving every Wave 4 commit unchanged. Conflict: src/agent_runtime/resources.py. Wave 3's _control_plane_snapshot() / _control_plane_path(path, *, snapshot=None) split is kept. The snapshot adds the effect-store directories to its prefix set after the recursive job-dir inventory and no longer references path (the auto-merged prefix check would have raised NameError there). _control_plane_path calls _aliases_effect_store after its os.stat, only for multiply linked files, so single-link files never list the store. Semantic reconciliation (no textual conflict): bg_monitor keeps launch settlement right after the first successful validate_job and before the authority check, with Wave 3's post-drain revalidation intact. The deleted-session branch, terminal before linkage validation, now settles a validated launch too: that job is later pruned and its publication retired, which would otherwise leave its effect RUNNING. Regression tests cover the snapshot form of the effect-store check and both deleted-session linkage outcomes.
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
tests/test_action_intents_shell_verbs.py
|
||||
tests/test_auth_config_lock_concurrency.py
|
||||
tests/test_auth_disabled_document_access.py
|
||||
tests/test_auth_event_loop.py
|
||||
tests/test_auth_policy.py
|
||||
tests/test_auth_regressions.py
|
||||
tests/test_auth_require_privilege_nondict.py
|
||||
tests/test_auth_root_path.py
|
||||
tests/test_auth_session_revocation.py
|
||||
tests/test_background_chat_completion_ui_static.py
|
||||
tests/test_background_containment.py
|
||||
tests/test_background_resource_identity.py
|
||||
tests/test_background_tool_jobs.py
|
||||
tests/test_bg_job_tools.py
|
||||
tests/test_bg_jobs_store.py
|
||||
tests/test_bg_monitor_stream.py
|
||||
tests/test_browser_identity_transport.py
|
||||
tests/test_browser_lifecycle.py
|
||||
tests/test_browser_observation.py
|
||||
tests/test_browser_producer_live_contract.py
|
||||
tests/test_browser_progress.py
|
||||
tests/test_browser_resource_identity.py
|
||||
tests/test_browser_screenshot_artifact_safety.py
|
||||
tests/test_browser_target_correction.py
|
||||
tests/test_browser_transport_recovery.py
|
||||
tests/test_builtin_actions_cookbook_serve_state.py
|
||||
tests/test_builtin_actions_nonstring.py
|
||||
tests/test_builtin_actions_owner_scope.py
|
||||
tests/test_builtin_mcp_bg_tasks.py
|
||||
tests/test_chat_background_stream_isolation.py
|
||||
tests/test_chat_helpers_bg_tasks_tracked.py
|
||||
tests/test_chat_preprocess_tool_policy.py
|
||||
tests/test_codex_cookbook_admin_gate.py
|
||||
tests/test_containment_process_tree.py
|
||||
tests/test_cookbook_agent_tool_ssh_validation.py
|
||||
tests/test_cookbook_cache_scan_isolation.py
|
||||
tests/test_cookbook_cached_scan_refresh.py
|
||||
tests/test_cookbook_chat_deeplinks_static.py
|
||||
tests/test_cookbook_cpu_only_serve.py
|
||||
tests/test_cookbook_dead_download_status.py
|
||||
tests/test_cookbook_dependency_completion_regression.py
|
||||
tests/test_cookbook_deps_recipes.py
|
||||
tests/test_cookbook_diagnosis.py
|
||||
tests/test_cookbook_diagnosis_js.py
|
||||
tests/test_cookbook_docker_access.py
|
||||
tests/test_cookbook_download_toast_duration.py
|
||||
tests/test_cookbook_endpoint_registration.py
|
||||
tests/test_cookbook_error_feedback.py
|
||||
tests/test_cookbook_error_tail_lines.py
|
||||
tests/test_cookbook_finished_download_label.py
|
||||
tests/test_cookbook_gemma4_thinking_template.py
|
||||
tests/test_cookbook_helpers.py
|
||||
tests/test_cookbook_hf_token.py
|
||||
tests/test_cookbook_local_serve_pid_winpid.py
|
||||
tests/test_cookbook_official_trending_filter.py
|
||||
tests/test_cookbook_package_detection.py
|
||||
tests/test_cookbook_port_parsing_js.py
|
||||
tests/test_cookbook_progress_signal_js.py
|
||||
tests/test_cookbook_remote_windows_diffusers.py
|
||||
tests/test_cookbook_same_host_server_profiles_js.py
|
||||
tests/test_cookbook_serve_lifecycle.py
|
||||
tests/test_cookbook_stop_without_procfs.py
|
||||
tests/test_cookbook_tool_dry_run.py
|
||||
tests/test_cookbook_windows_stop_tree_js.py
|
||||
tests/test_deep_research_browser_fallback.py
|
||||
tests/test_doc_library_open_orphaned.py
|
||||
tests/test_docs_no_orphan_images.py
|
||||
tests/test_document_editor_background_static.py
|
||||
tests/test_email_oauth_connect_smtp_security.py
|
||||
tests/test_email_oauth_docker_config.py
|
||||
tests/test_email_oauth_settings_redirect.py
|
||||
tests/test_host_shell_polling.py
|
||||
tests/test_orphan_reaping.py
|
||||
tests/test_owned_resource_identity.py
|
||||
tests/test_pr6020_browser_review_regressions.py
|
||||
tests/test_private_browser_tool.py
|
||||
tests/test_process_lifecycle.py
|
||||
tests/test_process_ownership.py
|
||||
tests/test_process_resource_identity.py
|
||||
tests/test_remote_resource_identity.py
|
||||
tests/test_request_authority.py
|
||||
tests/test_reserved_username_admin_escalation.py
|
||||
tests/test_resolve_session_auth_chatgpt.py
|
||||
tests/test_resource_identity.py
|
||||
tests/test_runtime_resource_integration.py
|
||||
tests/test_scheduled_remote_ssh_refusal.py
|
||||
tests/test_security_regressions.py
|
||||
tests/test_settings_shell_js_behavior.py
|
||||
tests/test_setup_device_auth_static.py
|
||||
tests/test_shell_routes.py
|
||||
tests/test_shell_service.py
|
||||
tests/test_stale_process_intersection.py
|
||||
tests/test_startup_shell_js.py
|
||||
tests/test_task_cookbook_admin_gate.py
|
||||
tests/test_task_shell_tools.py
|
||||
tests/test_wave3_background_followup.py
|
||||
tests/test_wave3_browser_platform.py
|
||||
tests/test_wave3_diagnostics.py
|
||||
tests/test_wave3_launch_cost_lifecycle.py
|
||||
tests/test_wave3_local_control.py
|
||||
tests/test_wave3_subprocess_environment.py
|
||||
tests/test_webhook_trigger_auth_exempt.py
|
||||
@@ -160,12 +160,12 @@ Re-audit of Checkpoint A seams found:
|
||||
|
||||
| Path | Remaining enforcement |
|
||||
| --- | --- |
|
||||
| PTY/native manager routes | `routes/shell_routes.py:setup_shell_routes.shell_exec/shell_stream` call `_require_admin` before `_exec_shell/_generate_pty/_generate_tmux`; internal/anonymous controls denied, authenticated human administration separate |
|
||||
| PTY/native manager routes | `routes/shell_routes.py:setup_shell_routes.shell_exec/shell_stream` call `_require_admin` before `_exec_shell/_generate_pty/_generate_tmux`; internal tool controls denied; auth-enabled human administration and explicit auth-disabled direct-local operator administration remain separate |
|
||||
| Additional process producers | `resources.ProcessResource.__post_init__` admits only frozen native producer/role combinations; `process_resources.resolve_process_operation` requires sealed observations |
|
||||
| Raw scheduled SSH | `TaskScheduler._execute_action` → `builtin_actions.action_ssh_command` → `_run_subprocess` refuses SSH without an external workload adapter |
|
||||
| Local Cookbook scheduled auto-stop | `routes/cookbook_routes.py:setup_cookbook_routes.protect_native_control` applies shell admin boundary to local mutation; `tools/cookbook._cookbook_kill_session` refuses registry-less local control; legacy internal shell route cannot gain administration |
|
||||
| Legacy/unscoped tasks | `authority.restore_task_authority` → `process_resources.resolve_process_operation` admits no missing creation scope |
|
||||
| Anonymous administration / generic app_api | `owned_resources.needs_owned_binding` rejects shell/model/Cookbook namespaces; `_require_admin` also rejects unlabelled loopback when anonymous or unauthenticated |
|
||||
| Anonymous administration / generic app_api | `owned_resources.needs_owned_binding` rejects shell/model/Cookbook namespaces; `_require_admin` rejects auth-enabled anonymous and auth-disabled untrusted/forwarded requests; direct-local operator administration is supported |
|
||||
|
||||
No model-reachable page producer entry remains in the native/research wrapper.
|
||||
Trusted observation/setup methods are not tools or routes. Native arbitrary
|
||||
|
||||
@@ -303,3 +303,25 @@ the rebase:
|
||||
refusals (no claim, no execution id).
|
||||
8. Rerun the four Wave 4 suites plus `test_runtime_resource_integration.py` and the
|
||||
`test_wave3_*` suites on the rebased tree.
|
||||
|
||||
## Integration with frozen lab `b1666951` (Wave 3 merged)
|
||||
|
||||
Merged (not rebased) so the Wave 4 commit SHAs are preserved. Resolution:
|
||||
|
||||
- `resources.py`: Wave 3's `_control_plane_snapshot()` / `_control_plane_path(path, *, snapshot=None)`
|
||||
architecture is kept. The snapshot computes `_effect_store_dirs()` and adds them to
|
||||
the returned prefix directories only after the recursive `job_dirs` inventory, and
|
||||
never references `path`. `_control_plane_path` checks inventoried identities after
|
||||
its `os.stat`, then calls `_aliases_effect_store` only for `st_nlink > 1`.
|
||||
- `bg_monitor.py`: settlement stays immediately after the first successful
|
||||
`validate_job`, before the authority comparison; Wave 3's post-drain revalidation is
|
||||
unchanged. The deleted-session branch (terminal before linkage validation) now also
|
||||
settles a validated launch, because that job is later pruned and its publication
|
||||
retired, which would otherwise leave its effect RUNNING.
|
||||
- Background publication is retired only by `bg_jobs._prune`, after a job is followed
|
||||
up or terminal-unfollowable, so every path that reaches retirement has already had
|
||||
its settlement attempt. A job with invalid linkage is never settled (no authority).
|
||||
- Scheduled builtin actions (e.g. `cookbook_serve`) run in the scheduler outside any
|
||||
agent journal and never reached `mark_dispatch`; Wave 3 only added their backend
|
||||
authority. Agent-dispatched local control (`download_model`, `serve_model`,
|
||||
`serve_preset`) is claimed by `dispatched()` before its handler mints a capability.
|
||||
|
||||
Reference in New Issue
Block a user