Skip to content

Commit 9f32d1a

Browse files
authored
refactor(status): move attention projections into bounded module (#2968)
1 parent 7049eb9 commit 9f32d1a

2 files changed

Lines changed: 87 additions & 22 deletions

File tree

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
"""Status attention projections inside the `status` bounded context."""
2+
3+
from __future__ import annotations
4+
5+
from typing import Any
6+
7+
from ..todos.contract import (
8+
TODO_TASK_CLASS_ADVANCEMENT,
9+
TODO_TASK_CLASS_MONITOR,
10+
)
11+
from ..todos.todo_summary import (
12+
normalize_todo_text,
13+
open_todo_items,
14+
todo_item_is_actionable_open,
15+
)
16+
from ..work_items.attention_queue import (
17+
build_attention_queue_projection as _build_attention_queue_projection,
18+
)
19+
from ..work_items.autonomous_candidates import (
20+
MAX_AUTONOMOUS_TODO_CANDIDATES,
21+
autonomous_backlog_candidates as _autonomous_backlog_candidates,
22+
autonomous_monitor_candidates as _autonomous_monitor_candidates,
23+
)
24+
25+
26+
MONITOR_SIGNAL_WAITING_ON = "monitor_signal"
27+
MAX_AUTONOMOUS_BACKLOG_CANDIDATES = MAX_AUTONOMOUS_TODO_CANDIDATES
28+
29+
30+
def autonomous_backlog_candidates(
31+
items: list[dict[str, Any]],
32+
*,
33+
limit: int = MAX_AUTONOMOUS_BACKLOG_CANDIDATES,
34+
) -> dict[str, Any] | None:
35+
return _autonomous_backlog_candidates(
36+
items,
37+
open_todo_items=open_todo_items,
38+
todo_item_is_actionable_open=todo_item_is_actionable_open,
39+
normalize_todo_text=normalize_todo_text,
40+
advancement_task_class=TODO_TASK_CLASS_ADVANCEMENT,
41+
limit=limit,
42+
)
43+
44+
45+
def autonomous_monitor_candidates(
46+
items: list[dict[str, Any]],
47+
*,
48+
limit: int = MAX_AUTONOMOUS_BACKLOG_CANDIDATES,
49+
) -> dict[str, Any] | None:
50+
return _autonomous_monitor_candidates(
51+
items,
52+
open_todo_items=open_todo_items,
53+
todo_item_is_actionable_open=todo_item_is_actionable_open,
54+
normalize_todo_text=normalize_todo_text,
55+
monitor_task_class=TODO_TASK_CLASS_MONITOR,
56+
monitor_signal_waiting_on=MONITOR_SIGNAL_WAITING_ON,
57+
limit=limit,
58+
)
59+
60+
61+
def build_attention_queue_projection(
62+
*,
63+
items: list[dict[str, Any]],
64+
goal_id_filter: str | None,
65+
autonomous_backlog_candidates: dict[str, Any] | None,
66+
autonomous_monitor_candidates: dict[str, Any] | None,
67+
) -> dict[str, Any]:
68+
return _build_attention_queue_projection(
69+
items=items,
70+
goal_id_filter=goal_id_filter,
71+
autonomous_backlog_candidates=autonomous_backlog_candidates,
72+
autonomous_monitor_candidates=autonomous_monitor_candidates,
73+
monitor_signal_waiting_on=MONITOR_SIGNAL_WAITING_ON,
74+
)

loopx/status.py

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,6 @@
7070
)
7171
from .control_plane.work_items.autonomous_candidates import (
7272
MAX_AUTONOMOUS_TODO_CANDIDATES as _MAX_AUTONOMOUS_TODO_CANDIDATES,
73-
autonomous_backlog_candidates as _autonomous_backlog_candidates_read_model,
74-
autonomous_monitor_candidates as _autonomous_monitor_candidates_read_model,
7573
)
7674
from .control_plane.agents.agent_lane_recommendation import (
7775
compact_agent_lane_recommendation as _compact_agent_lane_recommendation_read_model,
@@ -103,7 +101,6 @@
103101
from .control_plane.work_items.attention_queue import (
104102
AttentionQueueContext,
105103
build_attention_queue as _build_attention_queue_read_model,
106-
build_attention_queue_projection as _build_attention_queue_projection_read_model,
107104
merge_global_registry_findings as _merge_global_registry_findings_read_model,
108105
)
109106
from .control_plane.work_items.attention_routing import (
@@ -319,8 +316,6 @@
319316
)
320317
from .control_plane.todos.contract import (
321318
TODO_STATUS_OPEN,
322-
TODO_TASK_CLASS_ADVANCEMENT,
323-
TODO_TASK_CLASS_MONITOR,
324319
TODO_TASK_CLASS_USER_GATE,
325320
normalize_todo_status,
326321
normalize_todo_task_class as normalize_todo_task_class,
@@ -2212,31 +2207,24 @@ def autonomous_backlog_candidates(
22122207
*,
22132208
limit: int = MAX_AUTONOMOUS_BACKLOG_CANDIDATES,
22142209
) -> dict[str, Any] | None:
2215-
return _autonomous_backlog_candidates_read_model(
2216-
items,
2217-
open_todo_items=open_todo_items,
2218-
todo_item_is_actionable_open=todo_item_is_actionable_open,
2219-
normalize_todo_text=normalize_todo_text,
2220-
advancement_task_class=TODO_TASK_CLASS_ADVANCEMENT,
2221-
limit=limit,
2210+
from .control_plane.status.attention_projection import (
2211+
autonomous_backlog_candidates as _autonomous_backlog_candidates,
22222212
)
22232213

2214+
return _autonomous_backlog_candidates(items, limit=limit)
2215+
22242216

22252217
def autonomous_monitor_candidates(
22262218
items: list[dict[str, Any]],
22272219
*,
22282220
limit: int = MAX_AUTONOMOUS_BACKLOG_CANDIDATES,
22292221
) -> dict[str, Any] | None:
2230-
return _autonomous_monitor_candidates_read_model(
2231-
items,
2232-
open_todo_items=open_todo_items,
2233-
todo_item_is_actionable_open=todo_item_is_actionable_open,
2234-
normalize_todo_text=normalize_todo_text,
2235-
monitor_task_class=TODO_TASK_CLASS_MONITOR,
2236-
monitor_signal_waiting_on=MONITOR_SIGNAL_WAITING_ON,
2237-
limit=limit,
2222+
from .control_plane.status.attention_projection import (
2223+
autonomous_monitor_candidates as _autonomous_monitor_candidates,
22382224
)
22392225

2226+
return _autonomous_monitor_candidates(items, limit=limit)
2227+
22402228

22412229
def build_attention_queue_projection(
22422230
*,
@@ -2245,12 +2233,15 @@ def build_attention_queue_projection(
22452233
autonomous_backlog_candidates: dict[str, Any] | None,
22462234
autonomous_monitor_candidates: dict[str, Any] | None,
22472235
) -> dict[str, Any]:
2248-
return _build_attention_queue_projection_read_model(
2236+
from .control_plane.status.attention_projection import (
2237+
build_attention_queue_projection as _build_attention_queue_projection,
2238+
)
2239+
2240+
return _build_attention_queue_projection(
22492241
items=items,
22502242
goal_id_filter=goal_id_filter,
22512243
autonomous_backlog_candidates=autonomous_backlog_candidates,
22522244
autonomous_monitor_candidates=autonomous_monitor_candidates,
2253-
monitor_signal_waiting_on=MONITOR_SIGNAL_WAITING_ON,
22542245
)
22552246

22562247

0 commit comments

Comments
 (0)