Skip to content

Commit 02d0bcd

Browse files
tbitcsoz-agent
andcommitted
fix(tests): resolve ruff lint errors in test_dispatch.py
- Remove unused imports (F401): TaskStatus, DispatchEvent, TaskNode - Remove unused variable assignment for emitter (F841) - Rename ambiguous loop var l -> ln (E741) - Split long mock.patch.object lines (E501) - Apply ruff --fix for import sort (I001) Co-Authored-By: Oz <oz-agent@warp.dev>
1 parent 5e17ab5 commit 02d0bcd

1 file changed

Lines changed: 43 additions & 22 deletions

File tree

tests/test_dispatch.py

Lines changed: 43 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ def test_all_terminal_after_blocking(self):
213213
class TestRunnableNodes:
214214
def test_no_runnable_when_dep_pending(self):
215215
"""Node with PENDING dep is not yet runnable."""
216-
from specsmith.agent.dispatch import TaskDAGBuilder, TaskStatus
216+
from specsmith.agent.dispatch import TaskDAGBuilder
217217

218218
dag = TaskDAGBuilder.build(
219219
"f",
@@ -249,22 +249,22 @@ def test_both_runnable_after_dep_completed(self):
249249
class TestEventEmitter:
250250
def test_emitter_creates_jsonl(self, tmp_path: Path):
251251
"""EventEmitter creates events.jsonl before first node (REQ-328)."""
252-
from specsmith.agent.dispatch import DispatchEvent, EventEmitter
252+
from specsmith.agent.dispatch import EventEmitter
253253

254-
emitter = EventEmitter(tmp_path, "test-dag-001")
254+
EventEmitter(tmp_path, "test-dag-001")
255255
expected = tmp_path / ".specsmith" / "dispatch" / "test-dag-001" / "events.jsonl"
256256
assert expected.exists()
257257

258258
def test_emit_writes_jsonl_line(self, tmp_path: Path):
259-
from specsmith.agent.dispatch import DispatchEvent, EventEmitter
259+
from specsmith.agent.dispatch import EventEmitter
260260

261261
emitter = EventEmitter(tmp_path, "dag-write")
262262
emitter.node_started("node-1", "coder")
263263
emitter.node_completed("node-1", "rec-abc", "task done")
264264
emitter.node_failed("node-2", "timeout")
265265

266266
path = tmp_path / ".specsmith" / "dispatch" / "dag-write" / "events.jsonl"
267-
lines = [json.loads(l) for l in path.read_text().splitlines() if l.strip()]
267+
lines = [json.loads(ln) for ln in path.read_text().splitlines() if ln.strip()]
268268
assert len(lines) == 3
269269
assert lines[0]["event_type"] == "node_started"
270270
assert lines[0]["node_id"] == "node-1"
@@ -576,8 +576,8 @@ def test_events_jsonl_written(self, tmp_path: Path):
576576
jsonl = (
577577
tmp_path / ".specsmith" / "dispatch" / "events-001" / "events.jsonl"
578578
)
579-
lines = [json.loads(l) for l in jsonl.read_text().splitlines() if l.strip()]
580-
event_types = [l["event_type"] for l in lines]
579+
lines = [json.loads(ln) for ln in jsonl.read_text().splitlines() if ln.strip()]
580+
event_types = [ln["event_type"] for ln in lines]
581581
assert "node_started" in event_types
582582
assert "node_completed" in event_types
583583
assert "dag_done" in event_types
@@ -596,7 +596,6 @@ def test_pre_armed_abort_prevents_execution(self, tmp_path):
596596
AgentPool,
597597
EventEmitter,
598598
TaskDAGBuilder,
599-
TaskStatus,
600599
)
601600

602601
dag = TaskDAGBuilder.build("job", dag_id="abort-pre")
@@ -618,7 +617,10 @@ def test_pre_armed_abort_prevents_execution(self, tmp_path):
618617

619618
def test_abort_node_returns_false_for_unknown_node(self, tmp_path):
620619
from specsmith.agent.dispatch import (
621-
AgentDispatcher, AgentPool, EventEmitter, TaskDAGBuilder
620+
AgentDispatcher,
621+
AgentPool,
622+
EventEmitter,
623+
TaskDAGBuilder,
622624
)
623625
dag = TaskDAGBuilder.build("job", dag_id="abort-unknown")
624626
emitter = EventEmitter(tmp_path, "abort-unknown")
@@ -632,7 +634,10 @@ def test_abort_node_returns_false_for_unknown_node(self, tmp_path):
632634
def test_abort_flag_checked_after_preflight(self, tmp_path):
633635
"""Abort signalled during governance preflight exits before worker acquire."""
634636
from specsmith.agent.dispatch import (
635-
AgentDispatcher, AgentPool, EventEmitter, TaskDAGBuilder, TaskStatus
637+
AgentDispatcher,
638+
AgentPool,
639+
EventEmitter,
640+
TaskDAGBuilder,
636641
)
637642

638643
dag = TaskDAGBuilder.build("job", dag_id="abort-post-preflight")
@@ -646,7 +651,9 @@ def _preflight_and_abort(node):
646651
# Simulate preflight setting the abort flag mid-execution
647652
dispatcher.abort_node(node.id)
648653

649-
with mock.patch.object(dispatcher, "_governance_preflight", side_effect=_preflight_and_abort):
654+
with mock.patch.object(
655+
dispatcher, "_governance_preflight", side_effect=_preflight_and_abort
656+
):
650657
summary = dispatcher.run()
651658

652659
# Worker should never have been acquired
@@ -683,7 +690,10 @@ def test_node_started_payload_contains_depends_on(self, tmp_path):
683690
def test_dispatch_summary_dag_id_traceable(self, tmp_path):
684691
"""DispatchSummary.dag_id must match TaskDAG.dag_id (REQ-315)."""
685692
from specsmith.agent.dispatch import (
686-
AgentDispatcher, AgentPool, EventEmitter, TaskDAGBuilder
693+
AgentDispatcher,
694+
AgentPool,
695+
EventEmitter,
696+
TaskDAGBuilder,
687697
)
688698

689699
dag = TaskDAGBuilder.build("t", dag_id="trace-315")
@@ -693,8 +703,10 @@ def test_dispatch_summary_dag_id_traceable(self, tmp_path):
693703
dispatcher = AgentDispatcher(
694704
dag, mock_pool, emitter, project_root=tmp_path, max_workers=1
695705
)
696-
with mock.patch.object(dispatcher, "_invoke_worker",
697-
return_value={"summary": "", "files_changed": [], "equilibrium": True}), \
706+
with mock.patch.object(
707+
dispatcher, "_invoke_worker",
708+
return_value={"summary": "", "files_changed": [], "equilibrium": True},
709+
), \
698710
mock.patch.object(dispatcher, "_write_esdb_record", return_value=None), \
699711
mock.patch.object(dispatcher, "_governance_preflight"), \
700712
mock.patch.object(dispatcher, "_write_dispatch_ledger"):
@@ -705,7 +717,10 @@ def test_dispatch_summary_dag_id_traceable(self, tmp_path):
705717
def test_governance_block_in_error(self, tmp_path):
706718
"""Governance block must set error to 'Governance preflight blocked' (REQ-316)."""
707719
from specsmith.agent.dispatch import (
708-
AgentDispatcher, AgentPool, EventEmitter, TaskDAGBuilder
720+
AgentDispatcher,
721+
AgentPool,
722+
EventEmitter,
723+
TaskDAGBuilder,
709724
)
710725

711726
dag = TaskDAGBuilder.build("t", dag_id="gov-316")
@@ -725,11 +740,12 @@ def test_governance_block_in_error(self, tmp_path):
725740
# REQ-317: context_in populated by _propagate_context
726741
def test_context_injection_traceable(self):
727742
"""After _propagate_context, child.context_in contains parent's esdb_id (REQ-317)."""
743+
import tempfile
744+
from pathlib import Path
745+
728746
from specsmith.agent.dispatch import TaskDAGBuilder, TaskStatus
729747
from specsmith.agent.dispatch.dispatcher import AgentDispatcher, AgentPool
730748
from specsmith.agent.dispatch.events import EventEmitter
731-
from pathlib import Path
732-
import tempfile
733749

734750
with tempfile.TemporaryDirectory() as tmp:
735751
root = Path(tmp)
@@ -756,6 +772,7 @@ def test_context_injection_traceable(self):
756772
def test_retry_refuses_completed_node(self, tmp_path):
757773
"""dispatch retry --node n1 returns error if n1 is already completed (REQ-318)."""
758774
from click.testing import CliRunner
775+
759776
from specsmith.agent.dispatch import EventEmitter
760777
from specsmith.cli import main
761778

@@ -778,10 +795,8 @@ def test_retry_refuses_completed_node(self, tmp_path):
778795
# REQ-319: ESDB record contains DAG lineage
779796
def test_esdb_record_contains_dag_lineage(self, tmp_path):
780797
"""dispatch_result ChronoRecord MUST include dag_id and node_id (REQ-319)."""
798+
from specsmith.agent.dispatch import EventEmitter, TaskDAGBuilder
781799
from specsmith.agent.dispatch.dispatcher import AgentDispatcher, AgentPool
782-
from specsmith.agent.dispatch import (
783-
TaskDAGBuilder, EventEmitter, TaskNode, TaskStatus
784-
)
785800
from specsmith.esdb.store import ChronoStore
786801

787802
dag = TaskDAGBuilder.build("t", dag_id="esdb-319")
@@ -807,7 +822,10 @@ def test_esdb_record_contains_dag_lineage(self, tmp_path):
807822
def test_abort_error_contains_aborted(self, tmp_path):
808823
"""Pre-armed abort_node() produces error containing 'Aborted' (REQ-320)."""
809824
from specsmith.agent.dispatch import (
810-
AgentDispatcher, AgentPool, EventEmitter, TaskDAGBuilder
825+
AgentDispatcher,
826+
AgentPool,
827+
EventEmitter,
828+
TaskDAGBuilder,
811829
)
812830

813831
dag = TaskDAGBuilder.build("t", dag_id="abort-320")
@@ -828,7 +846,10 @@ def test_abort_error_contains_aborted(self, tmp_path):
828846
def test_dispatch_ledger_entry_written(self, tmp_path):
829847
"""AgentDispatcher.run() writes a dispatch ledger entry (REQ-313)."""
830848
from specsmith.agent.dispatch import (
831-
AgentDispatcher, AgentPool, EventEmitter, TaskDAGBuilder
849+
AgentDispatcher,
850+
AgentPool,
851+
EventEmitter,
852+
TaskDAGBuilder,
832853
)
833854

834855
# Create a minimal LEDGER.md so the ledger writer can find it

0 commit comments

Comments
 (0)