diff --git a/app/services/queue_overview.py b/app/services/queue_overview.py index 803c603..81789f7 100644 --- a/app/services/queue_overview.py +++ b/app/services/queue_overview.py @@ -165,13 +165,16 @@ def build_machines( if key == "macbook" else 0 ) - # state 판정 — macbook 의 done_15m 은 위에서 deep_summary stage 분 + summarize 풀 - # split 분이 이미 합산돼 있고, processing 은 deep_summary 진행 중(=맥북 생성 중)을 - # 포함하므로 동일 분기로 충분 (검수 보정 2026-06-11: deep 처리 중에도 active). - if key == "macbook" and deferred_pending > 0: + # state 판정 — 우선순위: 가동 > 보류 > 대기 (사용자 피드백 2026-06-11). + # 일하고 있으면(처리 중 또는 최근 15분 완료) 백오프 잔여가 있어도 "가동" — + # 보류 건수는 카드의 deferred_pending 라인이 따로 보여준다. "보류" 칩은 + # 실제로 일이 멈춰 있고 백오프만 쌓인 상태(sleep/불가 지속)에서만. + if processing > 0 or done_15m > 0: + state = "active" + elif key == "macbook" and deferred_pending > 0: state = "deferred" else: - state = "active" if (processing > 0 or done_15m > 0) else "idle" + state = "idle" machines.append({ "key": key, diff --git a/tests/test_queue_overview.py b/tests/test_queue_overview.py index 03fde17..d385592 100644 --- a/tests/test_queue_overview.py +++ b/tests/test_queue_overview.py @@ -130,10 +130,23 @@ def test_deferred_pending_always_on_macbook_card(): # ─── state 판정 ─────────────────────────────────────────────────────────────── -def test_macbook_state_deferred_wins_over_active(): +def test_macbook_state_active_wins_over_deferred_while_working(): + """가동 > 보류 (사용자 피드백 2026-06-11): 일하고 있으면 백오프 잔여가 있어도 '가동'. + + 보류 건수는 deferred_pending 필드가 별도로 전달 — 카드 라인이 표시. + """ stats = {"summarize": _stage(pending=1, deferred_pending=1)} - split = _split(macbook={"done_15m": 3}) # 최근 완료가 있어도 deferred 우선 + split = _split(macbook={"done_15m": 3}) machines = build_machines(stats, split, [], deep_enabled=True) + mb = _machine(machines, "macbook") + assert mb["state"] == "active" + assert mb["deferred_pending"] == 1 + + +def test_macbook_state_deferred_only_when_not_working(): + """일이 멈춰 있고(처리 0·최근 완료 0) 백오프만 쌓인 상태에서만 '보류'.""" + stats = {"summarize": _stage(pending=1, deferred_pending=1)} + machines = build_machines(stats, _split(), [], deep_enabled=True) assert _machine(machines, "macbook")["state"] == "deferred"