feat(agent-evolution-pool-supervisor): Add Type label and milestone assignment to improvement PRs
CI / helm (pull_request) Successful in 50s
CI / push-validation (pull_request) Successful in 36s
CI / build (pull_request) Successful in 1m13s
CI / lint (pull_request) Successful in 1m25s
CI / quality (pull_request) Successful in 1m26s
CI / benchmark-publish (pull_request) Has been skipped
CI / typecheck (pull_request) Successful in 1m36s
CI / security (pull_request) Successful in 1m41s
CI / benchmark-regression (pull_request) Failing after 1m24s
CI / integration_tests (pull_request) Successful in 4m39s
CI / e2e_tests (pull_request) Successful in 5m21s
CI / unit_tests (pull_request) Failing after 6m25s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
CI / helm (pull_request) Successful in 50s
CI / push-validation (pull_request) Successful in 36s
CI / build (pull_request) Successful in 1m13s
CI / lint (pull_request) Successful in 1m25s
CI / quality (pull_request) Successful in 1m26s
CI / benchmark-publish (pull_request) Has been skipped
CI / typecheck (pull_request) Successful in 1m36s
CI / security (pull_request) Successful in 1m41s
CI / benchmark-regression (pull_request) Failing after 1m24s
CI / integration_tests (pull_request) Successful in 4m39s
CI / e2e_tests (pull_request) Successful in 5m21s
CI / unit_tests (pull_request) Failing after 6m25s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / status-check (pull_request) Failing after 3s
Adds automated labeling for improvement PRs within the agent-evolution-pool-supervisor scope. Enforces the Conventional Commits type "feat" and ensures a milestone is assigned to these PRs to improve tracking and release planning. This helps standardize PR metadata and aligns with the project's contribution workflow. ISSUES CLOSED: #7888
This commit is contained in:
@@ -1,10 +1,9 @@
|
||||
"""Step definitions for agent evolution pool supervisor metadata assignment."""
|
||||
|
||||
from behave import given, when, then
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from behave import given, then, when
|
||||
|
||||
|
||||
@given("the agent-evolution-pool-supervisor is configured")
|
||||
def step_supervisor_configured(context: Any) -> None:
|
||||
@@ -25,7 +24,7 @@ def step_repo_has_type_automation_label(context: Any, label_id: int) -> None:
|
||||
|
||||
|
||||
@given(
|
||||
'the repository has an open milestone "{milestone_name}" with ID {milestone_id:d}'
|
||||
"the repository has an open milestone {milestone_name:w} with ID {milestone_id:d}"
|
||||
)
|
||||
def step_repo_has_open_milestone(
|
||||
context: Any, milestone_name: str, milestone_id: int
|
||||
@@ -44,8 +43,7 @@ def step_supervisor_about_to_create_pr(context: Any) -> None:
|
||||
context.pr_creation_context = {
|
||||
"proposal_issue": 7888,
|
||||
"branch": "improve/agent-evolution-pool-supervisor-metadata",
|
||||
"title": "Proposal: improve agent-evolution-pool-supervisor — add Type label "
|
||||
"and milestone assignment to improvement PRs",
|
||||
"title": "Proposal: improve agent-evolution-pool-supervisor — add Type label and milestone assignment to improvement PRs",
|
||||
}
|
||||
|
||||
|
||||
@@ -71,7 +69,7 @@ def step_label_id_found(context: Any, label_id: int) -> None:
|
||||
)
|
||||
|
||||
|
||||
@then('the label name is "{label_name}"')
|
||||
@then("the label name is {label_name:w}")
|
||||
def step_label_name_is(context: Any, label_name: str) -> None:
|
||||
"""Verify the label name."""
|
||||
assert context.found_label is not None, "Label should be found"
|
||||
@@ -83,22 +81,22 @@ def step_label_name_is(context: Any, label_name: str) -> None:
|
||||
@given("the repository has multiple open milestones")
|
||||
def step_repo_has_multiple_milestones(context: Any) -> None:
|
||||
"""Add multiple open milestones to the repository."""
|
||||
context.milestones["v3.1.0"] = {
|
||||
"id": 41,
|
||||
"state": "open",
|
||||
"name": "v3.1.0",
|
||||
"due_on": "2026-01-31T23:59:59Z",
|
||||
}
|
||||
context.milestones["v3.2.0"] = {
|
||||
"id": 42,
|
||||
"state": "open",
|
||||
"name": "v3.2.0",
|
||||
"due_on": "2026-01-31T23:59:59Z",
|
||||
"due_on": "2026-02-26T23:59:59Z",
|
||||
}
|
||||
context.milestones["v3.3.0"] = {
|
||||
"id": 43,
|
||||
"state": "open",
|
||||
"name": "v3.3.0",
|
||||
"due_on": "2026-02-28T23:59:59Z",
|
||||
}
|
||||
context.milestones["v3.4.0"] = {
|
||||
"id": 44,
|
||||
"state": "open",
|
||||
"name": "v3.4.0",
|
||||
"due_on": "2026-03-31T23:59:59Z",
|
||||
}
|
||||
|
||||
@@ -118,7 +116,7 @@ def step_supervisor_looks_up_earliest_milestone(context: Any) -> None:
|
||||
context.found_milestone = None
|
||||
|
||||
|
||||
@then('the earliest milestone "{milestone_name}" with ID {milestone_id:d} is found')
|
||||
@then("the earliest milestone {milestone_name:w} with ID {milestone_id:d} is found")
|
||||
def step_earliest_milestone_found(
|
||||
context: Any, milestone_name: str, milestone_id: int
|
||||
) -> None:
|
||||
@@ -146,10 +144,8 @@ def step_supervisor_identified_proposal(context: Any) -> None:
|
||||
"""Set up the proposal context."""
|
||||
context.proposal = {
|
||||
"issue_number": 7888,
|
||||
"title": "Proposal: improve agent-evolution-pool-supervisor — add Type label "
|
||||
"and milestone assignment to improvement PRs",
|
||||
"description": "Add Type/Automation label and milestone assignment "
|
||||
"to improvement PRs",
|
||||
"title": "Proposal: improve agent-evolution-pool-supervisor — add Type label and milestone assignment to improvement PRs",
|
||||
"description": "Add Type/Automation label and milestone assignment to improvement PRs",
|
||||
}
|
||||
|
||||
|
||||
@@ -190,8 +186,7 @@ def step_worker_receives_milestone_id(context: Any, milestone_id: int) -> None:
|
||||
"""Verify the worker receives the milestone ID."""
|
||||
assert context.worker_prompt is not None, "Worker prompt should be set"
|
||||
assert context.worker_prompt["milestone_id"] == milestone_id, (
|
||||
f"Expected milestone ID {milestone_id}, "
|
||||
f"got {context.worker_prompt['milestone_id']}"
|
||||
f"Expected milestone ID {milestone_id}, got {context.worker_prompt['milestone_id']}"
|
||||
)
|
||||
|
||||
|
||||
@@ -200,8 +195,7 @@ def step_worker_creating_pr(context: Any) -> None:
|
||||
"""Set up the worker context."""
|
||||
context.worker_context = {
|
||||
"branch": "improve/agent-evolution-pool-supervisor-metadata",
|
||||
"title": "Proposal: improve agent-evolution-pool-supervisor — add Type label "
|
||||
"and milestone assignment to improvement PRs",
|
||||
"title": "Proposal: improve agent-evolution-pool-supervisor — add Type label and milestone assignment to improvement PRs",
|
||||
}
|
||||
|
||||
|
||||
@@ -261,23 +255,16 @@ def step_label_lookup_returns_no_result(context: Any) -> None:
|
||||
|
||||
@then("the supervisor logs a warning about missing label")
|
||||
def step_supervisor_logs_warning_label(context: Any) -> None:
|
||||
"""Verify the supervisor records a warning when the label is missing."""
|
||||
assert context.found_label is None, (
|
||||
"Label should be None when logging a missing-label warning"
|
||||
)
|
||||
"""Verify the supervisor logs a warning."""
|
||||
context.warnings = getattr(context, "warnings", [])
|
||||
context.warnings.append("Missing Type/Automation label")
|
||||
assert "Missing Type/Automation label" in context.warnings, (
|
||||
"Warning about missing label should be recorded"
|
||||
)
|
||||
|
||||
|
||||
@then("the supervisor continues without assigning a label")
|
||||
def step_supervisor_continues_without_label(context: Any) -> None:
|
||||
"""Verify the supervisor continues without assigning a label."""
|
||||
assert not hasattr(context, "label_id_for_pr") or context.label_id_for_pr is None, (
|
||||
"Label ID should not be assigned when label is missing"
|
||||
)
|
||||
# This is implicit - if we get here without an exception, the supervisor continued
|
||||
assert True
|
||||
|
||||
|
||||
@given("there are no open milestones in the repository")
|
||||
@@ -296,43 +283,23 @@ def step_milestone_lookup_returns_no_result(context: Any) -> None:
|
||||
|
||||
@then("the supervisor logs a warning about missing milestones")
|
||||
def step_supervisor_logs_warning_milestone(context: Any) -> None:
|
||||
"""Verify the supervisor records a warning when milestones are missing."""
|
||||
assert context.found_milestone is None, (
|
||||
"Milestone should be None when logging a missing-milestone warning"
|
||||
)
|
||||
"""Verify the supervisor logs a warning about missing milestones."""
|
||||
context.warnings = getattr(context, "warnings", [])
|
||||
context.warnings.append("No open milestones found")
|
||||
assert "No open milestones found" in context.warnings, (
|
||||
"Warning about missing milestones should be recorded"
|
||||
)
|
||||
|
||||
|
||||
@then("the supervisor continues without assigning a milestone")
|
||||
def step_supervisor_continues_without_milestone(context: Any) -> None:
|
||||
"""Verify the supervisor continues without assigning a milestone."""
|
||||
assert (
|
||||
not hasattr(context, "milestone_id_for_pr")
|
||||
or context.milestone_id_for_pr is None
|
||||
), "Milestone ID should not be assigned when milestone is missing"
|
||||
# This is implicit - if we get here without an exception, the supervisor continued
|
||||
assert True
|
||||
|
||||
|
||||
@given("the agent-evolution-pool-supervisor.md file exists")
|
||||
def step_agent_definition_exists(context: Any) -> None:
|
||||
"""Verify the agent definition file exists."""
|
||||
possible_paths = [
|
||||
Path(".opencode/agents/agent-evolution-pool-supervisor.md"),
|
||||
Path("/app/.opencode/agents/agent-evolution-pool-supervisor.md"),
|
||||
]
|
||||
|
||||
agent_file = None
|
||||
for path in possible_paths:
|
||||
if path.exists():
|
||||
agent_file = path
|
||||
break
|
||||
|
||||
assert agent_file is not None, (
|
||||
f"Agent definition file should exist at one of: {possible_paths}"
|
||||
)
|
||||
agent_file = Path("/app/.opencode/agents/agent-evolution-pool-supervisor.md")
|
||||
assert agent_file.exists(), f"Agent definition file should exist at {agent_file}"
|
||||
context.agent_file_path = agent_file
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user