Skip to content

실행 폴더 mtime만 사용해 활동 중 run을 stale로 오인할 수 있다 #15

Description

@leehyowon14

요약

오래된 run 탐지는 .dpt/runs/<run> 디렉터리 자체의 mtime만 확인합니다. 기존 server.log에 새 로그를 써도 부모 run 디렉터리 mtime은 갱신되지 않아 장기 실행 세션이 stale로 분류될 수 있습니다.

  • 검토 기준: main@4e87765f95c106edb3c956cfad2abc1db64c0c39
  • 판정: 판별과 fixture 삭제 CONFIRMED, 실제 장기 세션 피해는 CONDITIONAL
  • 우선순위: P3

영향

활동 중인 run이 dpt clean 또는 대화형 cleanup 대상에 포함될 수 있습니다. 사용자가 승인하거나 --yes를 사용하면 삭제됩니다.

발생 조건 및 확인 범위

다음 조건이 모두 필요합니다.

  • 세션이 7일 이상 실행 중일 것
  • run 루트의 다른 디렉터리 엔트리 변경이 없을 것
  • 별도 cleanup이 실행될 것
  • 사용자가 삭제를 승인하거나 --yes를 사용할 것

doctor는 경고만 하고 직접 삭제하지 않습니다.

재현 및 검증 방법

  1. .dpt/runs/active/server.log를 만듭니다.
  2. active 디렉터리 mtime을 8일 전으로 설정합니다.
  3. server.log mtime만 현재 시각으로 갱신합니다.
  4. FindArtifacts(root, 7일, now)를 호출합니다.
  5. 현재 active run이 stale로 반환되는지 확인합니다.
  6. clean --yes fixture에서 fresh log가 있는 run도 삭제되는지 확인합니다.

기대 동작

활동 중인 run은 생성 시각만으로 stale 처리하지 않아야 합니다. active lock/PID/lease, heartbeat, 하위 파일 최신 시각 또는 삭제 직전 liveness 재검증이 필요합니다.

완료 조건

  • old run 디렉터리 안의 fresh server.log를 stale로 반환하지 않는다.
  • 실제 비활성 old run은 계속 탐지한다.
  • active 여부의 명확한 기준과 삭제 직전 재검증을 도입한다.
  • fresh-child/old-parent 및 inactive-old-run 회귀 테스트를 추가한다.
  • 대화형 cleanup과 clean --yes가 동일한 안전 정책을 사용한다.

관련 코드

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions