57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from control_plane.agents.models import Agent, AgentRole, AgentVersion, PromotionStatus
|
||
|
|
from control_plane.events.bus import EventBus
|
||
|
|
from control_plane.events.models import Event, EventType
|
||
|
|
from control_plane.projects.models import Milestone, Project, ProjectPlan, Task, TaskStatus
|
||
|
|
|
||
|
|
|
||
|
|
def test_project_hierarchy_and_events_persist() -> None:
|
||
|
|
project = Project.objects.create(name="Builder V1", goal="Bootstrap Artifex V1")
|
||
|
|
plan = ProjectPlan.objects.create(project=project, version=1, goal=project.goal)
|
||
|
|
milestone = Milestone.objects.create(
|
||
|
|
project=project,
|
||
|
|
plan=plan,
|
||
|
|
key="M1",
|
||
|
|
title="Control Plane",
|
||
|
|
goal="Persist deterministic control-plane state",
|
||
|
|
)
|
||
|
|
task = Task.objects.create(
|
||
|
|
project=project,
|
||
|
|
milestone=milestone,
|
||
|
|
task_type="implementation",
|
||
|
|
status=TaskStatus.READY,
|
||
|
|
goal="Create persisted Event Bus",
|
||
|
|
acceptance_criteria=["events are stored in PostgreSQL"],
|
||
|
|
)
|
||
|
|
|
||
|
|
event = EventBus().publish(EventType.TASK_CREATED, project=project, task=task, actor="test")
|
||
|
|
|
||
|
|
assert Project.objects.count() == 1
|
||
|
|
assert project.milestones.count() == 1
|
||
|
|
assert project.tasks.filter(status=TaskStatus.READY).count() == 1
|
||
|
|
assert Event.objects.get(id=event.id).event_type == EventType.TASK_CREATED
|
||
|
|
|
||
|
|
|
||
|
|
def test_agent_registry_supports_independent_reviewer_and_judge() -> None:
|
||
|
|
reviewer = Agent.objects.create(name="Reviewer", role=AgentRole.REVIEWER)
|
||
|
|
judge = Agent.objects.create(name="Project Judge", role=AgentRole.PROJECT_JUDGE)
|
||
|
|
reviewer_version = AgentVersion.objects.create(
|
||
|
|
agent=reviewer,
|
||
|
|
version=1,
|
||
|
|
model="qwen",
|
||
|
|
system_contract="Review implementation quality.",
|
||
|
|
promotion_status=PromotionStatus.CHAMPION,
|
||
|
|
)
|
||
|
|
judge_version = AgentVersion.objects.create(
|
||
|
|
agent=judge,
|
||
|
|
version=1,
|
||
|
|
model="qwen",
|
||
|
|
system_contract="Decide whether acceptance contracts pass.",
|
||
|
|
promotion_status=PromotionStatus.CHAMPION,
|
||
|
|
)
|
||
|
|
|
||
|
|
assert reviewer_version.agent.role == AgentRole.REVIEWER
|
||
|
|
assert judge_version.agent.role == AgentRole.PROJECT_JUDGE
|
||
|
|
assert reviewer_version.id != judge_version.id
|