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
+4
View File
@@ -2072,6 +2072,7 @@ class CompanyRecruiterFlowTests(unittest.IsolatedAsyncioTestCase):
decision = RouterDecision(
mode=ExecutionMode.COMPANY_MODE,
company_profile="custom",
org_id="test-org",
domains=[],
)
runtime_spec = engine.company_runtime_spec_builder.build_spec(
@@ -2140,6 +2141,7 @@ class CompanyRecruiterFlowTests(unittest.IsolatedAsyncioTestCase):
decision = RouterDecision(
mode=ExecutionMode.COMPANY_MODE,
company_profile="custom",
org_id="test-org",
domains=[],
)
runtime_spec = engine.company_runtime_spec_builder.build_spec(
@@ -2199,6 +2201,7 @@ class CompanyRecruiterFlowTests(unittest.IsolatedAsyncioTestCase):
decision = RouterDecision(
mode=ExecutionMode.COMPANY_MODE,
company_profile="custom",
org_id="test-org",
domains=[],
)
runtime_spec = engine.company_runtime_spec_builder.build_spec(
@@ -2312,6 +2315,7 @@ class CompanyRecruiterFlowTests(unittest.IsolatedAsyncioTestCase):
decision = RouterDecision(
mode=ExecutionMode.COMPANY_MODE,
company_profile="custom",
org_id="test-org",
domains=[],
)
runtime_spec = engine.company_runtime_spec_builder.build_spec(
+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()
+29
View File
@@ -13,6 +13,7 @@ from opc.core.org_config import (
)
from opc.engine import OPCEngine
from opc.layer2_organization.custom_runtime import CustomRuntimeRunner
from opc.plugins.office_ui.services.models import ServiceError
def test_requested_mode_normalization_keeps_core_company_router_main_compatible() -> None:
@@ -61,6 +62,34 @@ def test_custom_runtime_runner_loads_org_storage_without_mutating_parent_config(
assert (config_dir / "company_orgs" / "org_lab_config.yaml").exists()
def test_process_message_rejects_org_mode_without_org_id() -> None:
engine = OPCEngine.__new__(OPCEngine)
engine.opc_home = None
engine.config = OPCConfig()
runner = CustomRuntimeRunner(engine)
caught: ServiceError | None = None
async def _run() -> None:
await runner.process_message(
"run org",
project_id="default",
session_id="session-1",
org_id=None,
preferred_agent=None,
domains=None,
origin_task_id=None,
attachment_refs=None,
message_metadata=None,
)
try:
asyncio.run(_run())
except ServiceError as exc:
caught = exc
assert caught is not None
assert caught.code == "org_id_required"
def test_process_message_routes_org_mode_to_custom_runner(monkeypatch) -> None:
engine = OPCEngine.__new__(OPCEngine)
engine._initialized = True
+585 -2
View File
@@ -11,9 +11,15 @@ from unittest.mock import AsyncMock, MagicMock, patch
import yaml
from pydantic import ValidationError
from opc.core.config import AgentsConfig, ExternalAgentConfig, OPCConfig
from opc.core.config import (
AgentsConfig,
DEFAULT_ORGANIZATION_ID,
ExternalAgentConfig,
OPCConfig,
)
from opc.core.models import (
DelegationWorkItem,
ExecutionCheckpoint,
ExecutionMode,
RouterDecision,
SessionMessageRecord,
@@ -24,7 +30,8 @@ from opc.core.models import (
WorkItemExecutionStrategy,
)
from opc.engine import OPCEngine
from opc.layer2_organization.company_mode import CompanyWorkItemExecutor
from opc.layer2_organization.company_mode import CompanyRuntimeSpecBuilder, CompanyWorkItemExecutor
from opc.plugins.office_ui.services.models import ServiceError
from opc.layer3_agent.adapters.claude_code import ClaudeCodeAdapter
from opc.layer3_agent.adapters.codex_adapter import CodexAdapter
from opc.layer3_agent.adapters.cursor_adapter import CursorAdapter
@@ -391,6 +398,582 @@ class RuntimeConfigEnforcementTests(unittest.IsolatedAsyncioTestCase):
self.assertEqual(task.metadata["org_id"], "selected-org")
self.assertEqual(task.metadata["organization_id"], "selected-org")
def test_build_spec_rejects_custom_run_without_durable_org_id(self) -> None:
builder = CompanyRuntimeSpecBuilder(
org_engine=SimpleNamespace(
get_company_profile=lambda: "custom",
config=SimpleNamespace(
org=SimpleNamespace(
organization_id="active-org",
organization_name="Active Org",
organization_config_file="org_active-org_config.yaml",
company_profile="custom",
)
),
)
)
with self.assertRaises(ServiceError) as ctx:
builder.build_spec(
RouterDecision(
mode=ExecutionMode.COMPANY_MODE,
company_profile="custom",
org_id=None,
),
original_message="Run the company.",
)
assert ctx.exception.code == "org_id_required"
def test_build_spec_serializes_selected_org_not_active_config(self) -> None:
builder = CompanyRuntimeSpecBuilder(
org_engine=SimpleNamespace(
get_company_profile=lambda: "custom",
config=SimpleNamespace(
org=SimpleNamespace(
organization_id="active-org",
organization_name="Active Org",
organization_config_file="org_active-org_config.yaml",
company_profile="custom",
)
),
)
)
decision = RouterDecision(
mode=ExecutionMode.COMPANY_MODE,
company_profile="custom",
org_id="selected-org",
)
spec = builder.build_spec(decision, original_message="Run the company.")
assert spec.metadata["org_id"] == "selected-org"
assert spec.metadata["organization_id"] == "selected-org"
def test_runtime_org_id_for_identity_never_derives_from_active_config(self) -> None:
engine = OPCEngine(config=OPCConfig(), project_id="proj1")
engine.config.org.company_profile = "custom"
engine.config.org.organization_id = "active-org"
decision = RouterDecision(
mode=ExecutionMode.COMPANY_MODE,
company_profile="custom",
org_id=None,
)
resolved = OPCEngine._runtime_org_id_for_identity(
decision,
{},
engine.config.org,
)
assert resolved is None
async def test_ensure_runtime_work_item_task_rejects_custom_without_durable_org(self) -> None:
engine = OPCEngine(config=OPCConfig(), project_id="proj1")
engine.config.org.company_profile = "custom"
engine.config.org.organization_id = "active-org"
engine.store = SimpleNamespace(
get_runtime_task_for_work_item=AsyncMock(return_value=None),
save_delegation_work_item=AsyncMock(),
save_task=AsyncMock(),
link_work_item_runtime_task=AsyncMock(return_value=True),
)
engine.memory = SimpleNamespace(ensure_session=AsyncMock())
engine.org_engine = SimpleNamespace(
current_org_version=MagicMock(return_value=1),
current_runtime_topology_version=MagicMock(return_value=1),
)
engine._requests_explicit_project_knowledge = MagicMock(return_value=False)
work_item = DelegationWorkItem(
work_item_id="wi-no-durable-org",
run_id="run-no-durable-org",
cell_id="team::engineering",
team_instance_id="team-instance-1",
role_id="engineer",
seat_id="seat-engineer",
title="Engineering execution",
summary="Implement the requested change.",
kind="execute",
projection_id="engineering-execute",
metadata={"seat_id": "seat-engineer", "team_id": "team::engineering"},
)
with self.assertRaises(ServiceError) as ctx:
await engine._ensure_runtime_work_item_task(
work_item=work_item,
parent_session_id="sess-company",
original_message="Build the thing.",
decision=RouterDecision(
mode=ExecutionMode.COMPANY_MODE,
company_profile="custom",
org_id=None,
),
runtime_topology={
"final_decider_role_id": "lead",
"seats": [
{
"seat_id": "seat-engineer",
"team_id": "team::engineering",
"role_id": "engineer",
"employee_assignment": {"employee_id": "eng-1", "name": "Engineer"},
"metadata": {"role_name": "Engineer"},
}
],
},
delegation_playbook={},
secretary_context="",
target_output_dir=None,
origin_channel="cli",
origin_chat_id="",
origin_thread_id="",
origin_task_id=None,
attachment_refs=[],
attachment_context="",
force_native_execution=False,
)
assert ctx.exception.code == "org_id_required"
engine.store.save_task.assert_not_awaited()
async def test_ensure_runtime_work_item_task_rejects_existing_custom_task_without_durable_org(self) -> None:
existing = Task(
id="existing-no-org",
title="Engineering execution",
project_id="proj1",
session_id="sess-company:wi-existing-no-org",
assigned_to="engineer",
metadata={
"execution_mode": "company_mode",
"runtime_model": "multi_team_org",
"work_item_runtime": True,
"work_item_projection_id": "engineering-execute",
"work_item_turn_type": "execute",
"company_profile": "custom",
"delegation_seat_id": "seat-engineer",
},
)
engine = OPCEngine(config=OPCConfig(), project_id="proj1")
engine.config.org.company_profile = "custom"
engine.config.org.organization_id = "active-org"
engine.store = SimpleNamespace(
get_runtime_task_for_work_item=AsyncMock(return_value=existing),
save_delegation_work_item=AsyncMock(),
save_task=AsyncMock(),
link_work_item_runtime_task=AsyncMock(return_value=True),
)
engine.memory = SimpleNamespace(ensure_session=AsyncMock())
work_item = DelegationWorkItem(
work_item_id="wi-existing-no-org",
run_id="run-existing-no-org",
cell_id="team::engineering",
team_instance_id="team-instance-1",
role_id="engineer",
seat_id="seat-engineer",
title="Engineering execution",
summary="Implement the requested change.",
kind="execute",
projection_id="engineering-execute",
metadata={"seat_id": "seat-engineer", "team_id": "team::engineering"},
)
with self.assertRaises(ServiceError) as ctx:
await engine._ensure_runtime_work_item_task(
work_item=work_item,
parent_session_id="sess-company",
original_message="Build the thing.",
decision=RouterDecision(
mode=ExecutionMode.COMPANY_MODE,
company_profile="custom",
org_id=None,
),
runtime_topology={
"final_decider_role_id": "lead",
"seats": [
{
"seat_id": "seat-engineer",
"team_id": "team::engineering",
"role_id": "engineer",
"employee_assignment": {"employee_id": "eng-1", "name": "Engineer"},
"metadata": {"role_name": "Engineer"},
}
],
},
delegation_playbook={},
secretary_context="",
target_output_dir=None,
origin_channel="cli",
origin_chat_id="",
origin_thread_id="",
origin_task_id=None,
attachment_refs=[],
attachment_context="",
force_native_execution=False,
)
assert ctx.exception.code == "org_id_required"
engine.store.save_task.assert_not_awaited()
async def test_ensure_runtime_work_item_task_rejects_conflicting_org_ids(self) -> None:
existing = Task(
id="existing-conflict-org",
title="Engineering execution",
project_id="proj1",
session_id="sess-company:wi-existing-conflict-org",
assigned_to="engineer",
org_id="persisted-org",
metadata={
"execution_mode": "company_mode",
"runtime_model": "multi_team_org",
"work_item_runtime": True,
"work_item_projection_id": "engineering-execute",
"work_item_turn_type": "execute",
"company_profile": "custom",
"organization_id": "persisted-org",
"delegation_seat_id": "seat-engineer",
},
)
engine = OPCEngine(config=OPCConfig(), project_id="proj1")
engine.config.org.company_profile = "custom"
engine.config.org.organization_id = "active-org"
engine.store = SimpleNamespace(
get_runtime_task_for_work_item=AsyncMock(return_value=existing),
save_delegation_work_item=AsyncMock(),
save_task=AsyncMock(),
link_work_item_runtime_task=AsyncMock(return_value=True),
)
engine.memory = SimpleNamespace(ensure_session=AsyncMock())
work_item = DelegationWorkItem(
work_item_id="wi-existing-conflict-org",
run_id="run-existing-conflict-org",
cell_id="team::engineering",
team_instance_id="team-instance-1",
role_id="engineer",
seat_id="seat-engineer",
title="Engineering execution",
summary="Implement the requested change.",
kind="execute",
projection_id="engineering-execute",
metadata={"seat_id": "seat-engineer", "team_id": "team::engineering"},
)
with self.assertRaises(ServiceError) as ctx:
await engine._ensure_runtime_work_item_task(
work_item=work_item,
parent_session_id="sess-company",
original_message="Build the thing.",
decision=RouterDecision(
mode=ExecutionMode.COMPANY_MODE,
company_profile="custom",
org_id="selected-org",
),
runtime_topology={
"final_decider_role_id": "lead",
"seats": [
{
"seat_id": "seat-engineer",
"team_id": "team::engineering",
"role_id": "engineer",
"employee_assignment": {"employee_id": "eng-1", "name": "Engineer"},
"metadata": {"role_name": "Engineer"},
}
],
},
delegation_playbook={},
secretary_context="",
target_output_dir=None,
origin_channel="cli",
origin_chat_id="",
origin_thread_id="",
origin_task_id=None,
attachment_refs=[],
attachment_context="",
force_native_execution=False,
)
assert ctx.exception.code == "org_id_conflict"
engine.store.save_task.assert_not_awaited()
async def test_ensure_runtime_work_item_task_repairs_existing_custom_task_from_persisted_durable_org(self) -> None:
existing = Task(
id="existing-durable-org",
title="Engineering execution",
project_id="proj1",
session_id="sess-company:wi-existing-durable-org",
assigned_to="engineer",
org_id="persisted-org",
metadata={
"execution_mode": "company_mode",
"runtime_model": "multi_team_org",
"work_item_runtime": True,
"work_item_projection_id": "engineering-execute",
"work_item_turn_type": "execute",
"company_profile": "custom",
"organization_id": "stale-org",
"delegation_seat_id": "seat-engineer",
},
)
engine = OPCEngine(config=OPCConfig(), project_id="proj1")
engine.config.org.company_profile = "custom"
engine.config.org.organization_id = "active-org"
engine.store = SimpleNamespace(
get_runtime_task_for_work_item=AsyncMock(return_value=existing),
save_delegation_work_item=AsyncMock(),
save_task=AsyncMock(),
link_work_item_runtime_task=AsyncMock(return_value=True),
)
engine.memory = SimpleNamespace(ensure_session=AsyncMock())
work_item = DelegationWorkItem(
work_item_id="wi-existing-durable-org",
run_id="run-existing-durable-org",
cell_id="team::engineering",
team_instance_id="team-instance-1",
role_id="engineer",
seat_id="seat-engineer",
title="Engineering execution",
summary="Implement the requested change.",
kind="execute",
projection_id="engineering-execute",
metadata={"seat_id": "seat-engineer", "team_id": "team::engineering"},
)
repaired = await engine._ensure_runtime_work_item_task(
work_item=work_item,
parent_session_id="sess-company",
original_message="Build the thing.",
decision=RouterDecision(
mode=ExecutionMode.COMPANY_MODE,
company_profile="custom",
org_id=None,
),
runtime_topology={
"final_decider_role_id": "lead",
"seats": [
{
"seat_id": "seat-engineer",
"team_id": "team::engineering",
"role_id": "engineer",
"employee_assignment": {"employee_id": "eng-1", "name": "Engineer"},
"metadata": {"role_name": "Engineer"},
}
],
},
delegation_playbook={},
secretary_context="",
target_output_dir=None,
origin_channel="cli",
origin_chat_id="",
origin_thread_id="",
origin_task_id=None,
attachment_refs=[],
attachment_context="",
force_native_execution=False,
)
self.assertEqual(repaired.id, "existing-durable-org")
self.assertEqual(repaired.org_id, "persisted-org")
self.assertEqual(repaired.metadata["org_id"], "persisted-org")
self.assertEqual(repaired.metadata["organization_id"], "persisted-org")
engine.store.save_task.assert_awaited_with(existing)
async def test_delivery_self_evolution_custom_without_durable_org_fails_closed(self) -> None:
engine = OPCEngine(config=OPCConfig(), project_id="proj1")
engine.config.org.company_profile = "custom"
engine.config.org.organization_id = "active-org"
waiting_task = Task(
id="waiting-custom",
project_id="proj1",
session_id="sess-delivery",
metadata={
"execution_mode": "company_mode",
"company_profile": "custom",
"work_item_runtime": True,
"work_item_projection_id": "delivery",
"work_item_turn_type": "deliver",
},
)
engine.store = SimpleNamespace(get_task=AsyncMock(return_value=waiting_task))
engine._mark_company_runtime_checkpoint_status = AsyncMock()
engine._create_company_self_evolution_root_work_item = AsyncMock()
checkpoint = ExecutionCheckpoint(
checkpoint_id="cp-delivery",
project_id="proj1",
session_id="sess-delivery",
task_id="waiting-custom",
checkpoint_type="company_delivery_feedback",
payload={"waiting_task_id": "waiting-custom", "task_ids": ["waiting-custom"]},
)
result = await engine._run_company_delivery_self_evolution_consumed(
checkpoint,
action="approve",
)
assert "durable org identity" in result
engine._mark_company_runtime_checkpoint_status.assert_awaited_once_with(
checkpoint,
status="invalid",
)
engine._create_company_self_evolution_root_work_item.assert_not_awaited()
async def test_delivery_self_evolution_custom_uses_durable_org_over_payload_and_config(self) -> None:
engine = OPCEngine(config=OPCConfig(), project_id="proj1")
engine.config.org.company_profile = "custom"
engine.config.org.organization_id = "active-org"
waiting_task = Task(
id="waiting-custom-2",
project_id="proj1",
session_id="sess-delivery",
org_id="selected-org",
metadata={
"execution_mode": "company_mode",
"company_profile": "custom",
"work_item_runtime": True,
"work_item_projection_id": "delivery",
"work_item_turn_type": "deliver",
},
)
engine.store = SimpleNamespace(get_task=AsyncMock(return_value=waiting_task))
engine._mark_company_runtime_checkpoint_status = AsyncMock()
engine.org_engine = None
engine._company_followup_target_task = MagicMock(
return_value=SimpleNamespace(assigned_to="lead", metadata={}),
)
engine.company_executor = SimpleNamespace()
engine._self_evolution_assignments_by_role = MagicMock(return_value={})
engine._create_company_self_evolution_root_work_item = AsyncMock(return_value=None)
checkpoint = ExecutionCheckpoint(
checkpoint_id="cp-delivery-2",
project_id="proj1",
session_id="sess-delivery",
task_id="waiting-custom-2",
checkpoint_type="company_delivery_feedback",
payload={
"waiting_task_id": "waiting-custom-2",
"task_ids": ["waiting-custom-2"],
"organization_id": "stale-org",
},
)
await engine._run_company_delivery_self_evolution_consumed(
checkpoint,
action="approve",
)
call = engine._create_company_self_evolution_root_work_item.await_args
assert call is not None
assert call.kwargs["organization_id"] == "selected-org"
async def test_delivery_self_evolution_corporate_still_uses_config_default(self) -> None:
engine = OPCEngine(config=OPCConfig(), project_id="proj1")
waiting_task = Task(
id="waiting-corporate",
project_id="proj1",
session_id="sess-delivery",
metadata={
"execution_mode": "company_mode",
"company_profile": "corporate",
"work_item_runtime": True,
"work_item_projection_id": "delivery",
"work_item_turn_type": "deliver",
},
)
engine.store = SimpleNamespace(get_task=AsyncMock(return_value=waiting_task))
engine._mark_company_runtime_checkpoint_status = AsyncMock()
engine.org_engine = None
engine._company_followup_target_task = MagicMock(
return_value=SimpleNamespace(assigned_to="lead", metadata={}),
)
engine.company_executor = SimpleNamespace()
engine._self_evolution_assignments_by_role = MagicMock(return_value={})
engine._create_company_self_evolution_root_work_item = AsyncMock(return_value=None)
checkpoint = ExecutionCheckpoint(
checkpoint_id="cp-delivery-corp",
project_id="proj1",
session_id="sess-delivery",
task_id="waiting-corporate",
checkpoint_type="company_delivery_feedback",
payload={"waiting_task_id": "waiting-corporate", "task_ids": ["waiting-corporate"]},
)
await engine._run_company_delivery_self_evolution_consumed(
checkpoint,
action="approve",
)
call = engine._create_company_self_evolution_root_work_item.await_args
assert call is not None
assert call.kwargs["organization_id"] == DEFAULT_ORGANIZATION_ID
async def test_delivery_self_evolution_metadata_only_legacy_custom_uses_metadata_org(self) -> None:
engine = OPCEngine(config=OPCConfig(), project_id="proj1")
engine.config.org.company_profile = "custom"
engine.config.org.organization_id = "active-org"
waiting_task = Task(
id="waiting-legacy-metadata",
project_id="proj1",
session_id="sess-delivery",
metadata={
"work_item_runtime": True,
"work_item_projection_id": "delivery",
"work_item_turn_type": "deliver",
"org_id": "selected-org",
},
)
engine.store = SimpleNamespace(get_task=AsyncMock(return_value=waiting_task))
engine._mark_company_runtime_checkpoint_status = AsyncMock()
engine.org_engine = None
engine._company_followup_target_task = MagicMock(
return_value=SimpleNamespace(assigned_to="lead", metadata={}),
)
engine.company_executor = SimpleNamespace()
engine._self_evolution_assignments_by_role = MagicMock(return_value={})
engine._create_company_self_evolution_root_work_item = AsyncMock(return_value=None)
checkpoint = ExecutionCheckpoint(
checkpoint_id="cp-delivery-legacy",
project_id="proj1",
session_id="sess-delivery",
task_id="waiting-legacy-metadata",
checkpoint_type="company_delivery_feedback",
payload={
"waiting_task_id": "waiting-legacy-metadata",
"task_ids": ["waiting-legacy-metadata"],
},
)
await engine._run_company_delivery_self_evolution_consumed(
checkpoint,
action="approve",
)
call = engine._create_company_self_evolution_root_work_item.await_args
assert call is not None
assert call.kwargs["organization_id"] == "selected-org"
async def test_delivery_self_evolution_conflicting_org_ids_fail_closed(self) -> None:
engine = OPCEngine(config=OPCConfig(), project_id="proj1")
engine.config.org.company_profile = "custom"
engine.config.org.organization_id = "active-org"
waiting_task = Task(
id="waiting-conflict",
project_id="proj1",
session_id="sess-delivery",
org_id="selected-org",
metadata={
"work_item_runtime": True,
"work_item_projection_id": "delivery",
"work_item_turn_type": "deliver",
"org_id": "other-org",
},
)
engine.store = SimpleNamespace(get_task=AsyncMock(return_value=waiting_task))
engine._mark_company_runtime_checkpoint_status = AsyncMock()
engine.org_engine = None
engine._company_followup_target_task = MagicMock(
return_value=SimpleNamespace(assigned_to="lead", metadata={}),
)
engine.company_executor = SimpleNamespace()
engine._self_evolution_assignments_by_role = MagicMock(return_value={})
engine._create_company_self_evolution_root_work_item = AsyncMock(return_value=None)
checkpoint = ExecutionCheckpoint(
checkpoint_id="cp-delivery-conflict",
project_id="proj1",
session_id="sess-delivery",
task_id="waiting-conflict",
checkpoint_type="company_delivery_feedback",
payload={
"waiting_task_id": "waiting-conflict",
"task_ids": ["waiting-conflict"],
},
)
result = await engine._run_company_delivery_self_evolution_consumed(
checkpoint,
action="approve",
)
assert "org identity" in result
engine._mark_company_runtime_checkpoint_status.assert_awaited_once_with(
checkpoint,
status="invalid",
)
engine._create_company_self_evolution_root_work_item.assert_not_awaited()
async def test_company_materialized_work_item_uses_selected_agent_over_template_preference(self) -> None:
saved_tasks: list[Task] = []