fix(ui): enforce durable org identity for runtime followups

This commit is contained in:
cgycorey
2026-08-02 17:20:34 +01:00
parent 734a2d5969
commit 15ab07cba2
9 changed files with 943 additions and 22 deletions
+149
View File
@@ -260,6 +260,155 @@ def test_work_item_chat_resume_uses_canonical_ui_anchor_as_engine_origin() -> No
asyncio.run(scenario())
def test_company_suspend_reply_routes_selected_org_to_engine() -> None:
async def scenario() -> None:
_tasks, checkpoint = _runtime_records()
handler = WSHandler.__new__(WSHandler)
handler._exec_mode = "task"
handler._company_profile = "corporate"
handler._shutting_down = False
handler._active_runtime_children = {}
handler._session_to_task = {}
handler._task_bg_context = {}
handler._company_suspend_reply_locks = {"runtime-session": asyncio.Lock()}
handler.chat_store = None
handler._set_company_runtime_control = AsyncMock()
handler._normalize_session_exec_mode = MagicMock(return_value="task")
handler._normalize_session_company_profile = MagicMock(return_value="corporate")
handler._resolve_task_session_config = MagicMock(return_value=("org", "custom"))
handler._resolve_task_org_id = MagicMock(return_value="selected-org")
handler._extract_checkpoint_metadata = AsyncMock(return_value=None)
handler._sync_task_transcript_messages = AsyncMock()
handler.on_kanban_changed = AsyncMock()
handler._flush_progress = AsyncMock()
run_engine = SimpleNamespace(
project_id="project-a",
process_message=AsyncMock(return_value="resumed"),
)
target = {
"ui_anchor_task_id": "ui-anchor",
"config_task": SimpleNamespace(
metadata={"exec_mode": "org", "company_profile": "custom"},
org_id="selected-org",
),
}
await handler._process_company_suspend_reply(
ui_task_id="final-decider",
runtime_session_id="runtime-session",
content="continue",
attachment_refs=None,
message_metadata={"ui_force_resume": True},
user_message_id=None,
user_message_created_at=None,
run_engine=run_engine,
run_project_id="project-a",
target=target,
checkpoint=checkpoint,
lock=handler._company_suspend_reply_locks["runtime-session"],
)
call = run_engine.process_message.await_args
assert call.kwargs["org_id"] == "selected-org"
asyncio.run(scenario())
def test_delivery_feedback_reply_fails_closed_without_durable_parent_task() -> None:
async def scenario() -> None:
handler = WSHandler.__new__(WSHandler)
handler._exec_mode = "task"
handler._company_profile = "corporate"
handler._shutting_down = False
handler._active_runtime_children = {}
handler._session_to_task = {}
handler._task_bg_context = {}
handler._company_delivery_feedback_reply_locks = {}
handler.chat_store = None
handler._store_is_ready = MagicMock(return_value=True)
handler._normalize_session_exec_mode = MagicMock(return_value="task")
handler._normalize_session_company_profile = MagicMock(return_value="corporate")
handler._resolve_task_session_config = MagicMock(return_value=("org", "custom"))
handler._resolve_task_org_id = MagicMock(return_value="")
handler._chat_store_is_ready = MagicMock(return_value=False)
handler._flush_progress = AsyncMock()
run_engine = SimpleNamespace(
project_id="project-a",
store=SimpleNamespace(get_task=AsyncMock(return_value=None)),
run_company_delivery_self_evolution_checkpoint=AsyncMock(return_value="ran"),
)
await handler._process_company_delivery_feedback_reply(
parent_task_id="delivery-task",
parent_session_id="delivery-session",
reply_channel_id="session:delivery-task",
content="approved",
attachment_refs=None,
message_metadata=None,
user_message_id=None,
user_message_created_at=None,
run_engine=run_engine,
run_project_id="project-a",
checkpoint=SimpleNamespace(checkpoint_id="cp-delivery", payload={}),
waiting_task_id="delivery-task",
lock=asyncio.Lock(),
)
run_engine.run_company_delivery_self_evolution_checkpoint.assert_not_awaited()
handler._resolve_task_org_id.assert_not_called()
asyncio.run(scenario())
def test_delivery_feedback_reply_proceeds_with_durable_parent_task() -> None:
async def scenario() -> None:
handler = WSHandler.__new__(WSHandler)
handler._exec_mode = "task"
handler._company_profile = "corporate"
handler._shutting_down = False
handler._active_runtime_children = {}
handler._session_to_task = {}
handler._task_bg_context = {}
handler._company_delivery_feedback_reply_locks = {}
handler.chat_store = None
handler._store_is_ready = MagicMock(return_value=True)
handler._normalize_session_exec_mode = MagicMock(return_value="task")
handler._normalize_session_company_profile = MagicMock(return_value="corporate")
handler._resolve_task_session_config = MagicMock(return_value=("org", "custom"))
handler._resolve_task_org_id = MagicMock(return_value="selected-org")
handler._chat_store_is_ready = MagicMock(return_value=False)
handler._flush_progress = AsyncMock()
parent_task = SimpleNamespace(id="delivery-task")
run_engine = SimpleNamespace(
project_id="project-a",
store=SimpleNamespace(get_task=AsyncMock(return_value=parent_task)),
run_company_delivery_self_evolution_checkpoint=AsyncMock(return_value="ran"),
)
await handler._process_company_delivery_feedback_reply(
parent_task_id="delivery-task",
parent_session_id="delivery-session",
reply_channel_id="session:delivery-task",
content="approved",
attachment_refs=None,
message_metadata=None,
user_message_id=None,
user_message_created_at=None,
run_engine=run_engine,
run_project_id="project-a",
checkpoint=SimpleNamespace(checkpoint_id="cp-delivery", payload={}),
waiting_task_id="delivery-task",
lock=asyncio.Lock(),
)
call = run_engine.run_company_delivery_self_evolution_checkpoint.await_args
assert call is not None
assert call.kwargs["action"] == "approve"
handler._resolve_task_org_id.assert_called_once_with(parent_task)
asyncio.run(scenario())
def test_suspend_reply_missing_custom_org_id_fails_closed_before_engine_call() -> None:
async def scenario() -> None:
_tasks, checkpoint = _runtime_records()