Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .custodian/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ tests_root: test
audit:
# This repo's .console/ is reconciled + clean; flip R1/R2 to enforce.
reconcile_enforce: true
# `reconcile_enforce` is consumed by the reconcile (R1/R2) detector but is
# absent from custodian-doctor's built-in known-audit-key list, so it must be
# declared here to avoid a spurious "unknown audit key" doctor warning under
# --strict. (Does not disable any check; the key remains active.)
plugin_audit_keys:
- reconcile_enforce

cross_repo:
platform_manifest_repo: ../PlatformManifest
Expand Down
2 changes: 2 additions & 0 deletions test/unit/switchboard/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (C) 2026 ProtocolWarden
2 changes: 2 additions & 0 deletions test/unit/switchboard/contracts/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (C) 2026 ProtocolWarden
11 changes: 6 additions & 5 deletions test/unit/switchboard/contracts/test_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from __future__ import annotations

import pytest
from pydantic import ValidationError

from switchboard.contracts.common import (
BranchPolicy,
Expand All @@ -22,7 +23,7 @@ def test_construction(self) -> None:

def test_frozen(self) -> None:
t = TaskTarget(repo_key="r", clone_url="u", base_branch="main")
with pytest.raises(Exception):
with pytest.raises(ValidationError):
t.repo_key = "changed" # type: ignore[misc]

def test_allowed_paths(self) -> None:
Expand All @@ -44,11 +45,11 @@ def test_custom_values(self) -> None:

def test_frozen(self) -> None:
ec = ExecutionConstraints()
with pytest.raises(Exception):
with pytest.raises(ValidationError):
ec.timeout_seconds = 999 # type: ignore[misc]

def test_timeout_minimum(self) -> None:
with pytest.raises(Exception):
with pytest.raises(ValidationError):
ExecutionConstraints(timeout_seconds=0)


Expand All @@ -64,7 +65,7 @@ def test_custom(self) -> None:

def test_frozen(self) -> None:
vp = ValidationProfile(profile_name="x")
with pytest.raises(Exception):
with pytest.raises(ValidationError):
vp.profile_name = "y" # type: ignore[misc]


Expand All @@ -81,5 +82,5 @@ def test_custom(self) -> None:

def test_frozen(self) -> None:
bp = BranchPolicy()
with pytest.raises(Exception):
with pytest.raises(ValidationError):
bp.open_pr = True # type: ignore[misc]
3 changes: 2 additions & 1 deletion test/unit/switchboard/contracts/test_proposal.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from __future__ import annotations

import pytest
from pydantic import ValidationError

from switchboard.contracts.common import TaskTarget
from switchboard.contracts.enums import ExecutionMode, Priority, RiskLevel, TaskType
Expand Down Expand Up @@ -58,7 +59,7 @@ def test_custom_priority_and_risk() -> None:

def test_frozen() -> None:
p = _minimal()
with pytest.raises(Exception):
with pytest.raises(ValidationError):
p.goal_text = "changed" # type: ignore[misc]


Expand Down
7 changes: 4 additions & 3 deletions test/unit/switchboard/contracts/test_routing.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from __future__ import annotations

import pytest
from pydantic import ValidationError

from switchboard.contracts.enums import BackendName, LaneName
from switchboard.contracts.routing import LaneDecision
Expand Down Expand Up @@ -39,15 +40,15 @@ def test_defaults() -> None:

def test_confidence_bounds() -> None:
assert _minimal(confidence=0.75).confidence == 0.75
with pytest.raises(Exception):
with pytest.raises(ValidationError):
_minimal(confidence=1.1)
with pytest.raises(Exception):
with pytest.raises(ValidationError):
_minimal(confidence=-0.1)


def test_frozen() -> None:
d = _minimal()
with pytest.raises(Exception):
with pytest.raises(ValidationError):
d.confidence = 0.5 # type: ignore[misc]


Expand Down
1 change: 0 additions & 1 deletion test/unit/test_aider_local_routing.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
RiskLevel,
TaskType,
)

from switchboard.lane.defaults import DEFAULT_POLICY
from switchboard.lane.engine import LaneSelector

Expand Down
1 change: 0 additions & 1 deletion test/unit/test_catalog_advisor.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

from switchboard.contracts import LaneDecision
from switchboard.contracts.enums import BackendName, LaneName

from switchboard.lane.catalog_advisor import (
AdvisoryLevel,
advise,
Expand Down
4 changes: 2 additions & 2 deletions test/unit/test_cxrp_emission.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@
from cxrp.contracts import LaneDecision as CxrpLaneDecision
from cxrp.validation.json_schema import validate_contract
from cxrp.vocabulary.lane import LaneType
from switchboard.contracts import LaneDecision as SbLaneDecision
from switchboard.contracts.enums import BackendName, LaneName

from switchboard.adapters.cxrp_mapper import to_cxrp_lane_decision
from switchboard.contracts import LaneDecision as SbLaneDecision
from switchboard.contracts.enums import BackendName, LaneName


def _serialize_for_schema(decision: CxrpLaneDecision) -> dict:
Expand Down
5 changes: 2 additions & 3 deletions test/unit/test_lane_decision_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@

from __future__ import annotations

from switchboard.contracts import LaneDecision, TaskProposal
from switchboard.contracts import TaskProposal
from switchboard.contracts.common import TaskTarget
from switchboard.contracts.enums import (
BackendName,
ExecutionMode,
LaneName,
Priority,
Expand Down Expand Up @@ -94,7 +93,7 @@ def test_lane_decision_metadata_is_dict():

def test_default_policy_decisions_always_have_worker_backend():
selector = LaneSelector()
from switchboard.contracts.enums import TaskType, RiskLevel
from switchboard.contracts.enums import RiskLevel, TaskType
for task_type in [TaskType.BUG_FIX, TaskType.FEATURE, TaskType.LINT_FIX, TaskType.REFACTOR]:
proposal = _proposal(task_type=task_type, risk_level=RiskLevel.LOW)
decision = selector.select(proposal)
Expand Down
2 changes: 1 addition & 1 deletion test/unit/test_lane_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from __future__ import annotations

import pytest

from switchboard.contracts import LaneDecision, TaskProposal
from switchboard.contracts.common import (
TaskTarget,
Expand All @@ -17,7 +18,6 @@
RiskLevel,
TaskType,
)

from switchboard.lane.defaults import DEFAULT_POLICY
from switchboard.lane.engine import LaneSelector, _proposal_attrs
from switchboard.lane.policy import (
Expand Down
1 change: 0 additions & 1 deletion test/unit/test_lane_engine_demote.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
RiskLevel,
TaskType,
)

from switchboard.lane.engine import LaneSelector
from switchboard.lane.policy import (
FallbackPolicy,
Expand Down
1 change: 0 additions & 1 deletion test/unit/test_lane_planner.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
TaskTarget,
)
from switchboard.contracts.enums import ExecutionMode, Priority, RiskLevel, TaskType

from switchboard.lane.planner import DecisionPlanner
from switchboard.lane.policy import FallbackPolicy, LaneRoutingPolicy
from switchboard.lane.routing import EligibilityStatus, RoutingPlan
Expand Down
2 changes: 1 addition & 1 deletion test/unit/test_lane_routing_matrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
from pathlib import Path

import pytest

from switchboard.contracts import TaskProposal
from switchboard.contracts.common import TaskTarget
from switchboard.contracts.enums import ExecutionMode, Priority, RiskLevel, TaskType

from switchboard.lane.planner import DecisionPlanner
from switchboard.lane.routing import EligibilityStatus

Expand Down
Loading
Loading