Skip to content

detached-work: status=stopped 알림이 "작업 실패"와 "감시자 유실"을 구분하지 못함 (#1258 개선안 3, 상류 소관) #1267

Description

@seoseo-ai

#1258에서 분리. 개선안 1·2는 #1259와 #1265로 구현 완료되었고, 남은 개선안 3만 여기서 추적한다.

문제

<task-notification status=stopped>는 두 개의 전혀 다른 상황에 같은 문구를 쓴다.

  1. 작업 자체가 실패/중단됨 — 조치가 필요하다
  2. 감시자만 유실됨 — 작업은 detached라 계속 돌고 있거나 이미 끝났고, 조치는 로그 확인뿐이다

에이전트는 이 알림만으로 둘을 구분할 수 없어, 이미 성공한 작업을 실패로 오판하거나 멱등하지 않은 작업을 재실행할 위험이 있다. #1258의 원 사례가 정확히 이것이었다 (EXIT=0, 12/12로 끝난 작업이 실패 의심 상태로 남음).

왜 이 레포에서 못 고치는가

해당 문구는 Claude Code 하네스가 생성한다. ccc-node 전수 검색 결과 이 문자열을 만들어 내는 코드는 없고, 매칭되는 것은 #1265가 추가한 설명 주석뿐이다. 즉 알림 문구 자체를 바꾸는 것은 상류 소관이다.

현재 완화 상태 (#1265, 51ae68e)

ccc-node 쪽에서 할 수 있는 완화는 이미 적용되어 있다. claude/hooks/lib/detached_jobs.py가 로그의 EXIT= 마커를 근거로 detached 작업을 done/running/lost로 분류하고, 매 SessionStart에 다시 읽는다. 이 판정은 감시자 생존과 무관하므로, status=stopped를 받아도 실제 상태는 별도로 확인 가능하다.

따라서 오판 위험 자체는 이미 낮아졌고, 남은 것은 알림 문구가 여전히 오해를 유도한다는 점이다.

할 수 있는 후속

  • 상류(Claude Code)에 문구 구분을 제안할지 판단
  • 또는 ccc-node 쪽에서 status=stopped 수신 시 자동으로 detached_jobs.py sweep을 참조하도록 하는 훅/문서 강화 — 이건 이 레포에서 가능하다

관련

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions