프로젝트 복사에 예약까지 따라오면 새 공간이 준비되는 순간 같은 글이나 처리가 다시 실행될 수 있다. 나는 예약 정보는 이어 주되 paused로 만들었다. 원본을 복사했다는 행동만으로 앞으로의 외부 실행까지 새로 허락했다고 해석하고 싶지 않았기 때문이다.

예약의 모양을 보존해도 실행 상태는 바꾼다

ProjectJobs.copy는 원본 프로젝트의 예약을 읽고 새 예약 ID를 만든다. 프로그램과 입력, 예정 시각은 이어가지만 status는 paused다. 원래 실행 ID와 오류는 지운다. 사본의 설정과 과거 원본 실행의 결과를 한 기록처럼 섞지 않으려는 선택이다.

이 함수는 대기 중인 항목만 복사하는 것이 아니라 원본 목록을 순회한다. 따라서 과거에 끝났던 항목도 사본에서는 멈춘 설정이 될 수 있다. 화면에서 예약 개수가 같다고 모두 미래에 실행 가능한 일이라고 볼 수 없다. 항목의 현재 상태와 원래 시각을 함께 읽어야 한다.

새 탭 대응이 없는 예약은 그대로 넘기지 않는다

복사는 원본 탭 ID와 새 탭 ID의 대응표를 받는다. 예약의 탭을 새 표에서 찾지 못하면 그 항목을 건너뛴다. 연결된 항목은 새 workspaceId와 tabId로 바꾸고 미지정 프로필의 대응도 반영한다. 원본 탭을 새 프로젝트의 실행 대상으로 남기는 방식이 아니다.

같은 저장 계정을 의도적으로 공유하는 경우 프로필 연결은 유지될 수 있다. 그러나 계정이 같아도 대상 문서와 입력의 뜻이 같다는 보장은 없다. 나는 식별자 재연결을 필요한 첫 단계로 보고, 사본을 실제 실행하기 전에는 업무 대상과 자료를 다시 읽어야 한다고 설명한다.

재개는 미래 시각의 paused 항목에만 허용한다

change의 resume 경로는 해당 프로젝트의 예약인지 확인하고 상태가 paused인지, 예정 시각이 아직 미래인지 검사한다. 과거 시각이 된 복사본을 재개 버튼 한 번으로 즉시 밀어 넣지 않는다. 시각을 바꿔야 한다면 기존 재개와 다른 생성·편집 절차가 필요하다는 뜻이다.

재개가 허용돼 queued가 됐어도 그 자리에서 업무가 완료되는 것은 아니다. 타이머가 대상을 다시 검증하고 정의 해시를 대조한 뒤 실제 실행을 시작한다. 나는 재개 요청을 받았다는 응답, 실행이 시작됐다는 상태, 실제 결과가 확인됐다는 상태를 같은 성공 문구로 줄이지 않았다.

재개와 취소가 겹쳐도 기록 순서를 정한다

예약 ID별 locked는 같은 항목의 메타데이터 변경을 순서대로 처리한다. 실제 긴 프로그램은 이 잠금 바깥에서 실행한다. 취소는 queued와 paused에만 허용하므로 이미 실행된 외부 행동을 이 목록 상태만 바꿔 취소했다고 말할 수 없다. 실행 중지와 예약 취소는 별도 수명을 가진다.

프로젝트 실행 차선도 원래 실행의 소유 증표를 확인하고 해제한다. 과거 실행의 늦은 정리가 새 예약 실행의 자리를 지워서는 안 된다. 공개한 합성 차선 모듈에서 이 작은 규칙을 직접 시험할 수 있다. 그 모듈은 예약 복사와 파일 지속 저장까지 구현한 것은 아니므로 적용 범위를 함께 적었다.

기존 시험은 멈춘 사본과 새 실행 ID를 확인한다

단위 시험은 두 프로젝트의 예약이 병렬로 끝나고 같은 프로젝트의 두 번째 예약은 기다리는지 본다. 이어 복사된 모든 항목이 paused이고 원래 runId가 없으며 새 탭을 가리키는지 확인한다. 격리 시나리오도 프로젝트 복사 뒤 화면 상태의 예약이 멈춰 있는지 읽는다.

별도 복구 시험은 running 기록을 다시 열었을 때 needs_review로 남고 dispatch 호출이0회인지 확인한다. 이것은 복사 기능과 별개지만 자동 재실행을 피한다는 같은 판단을 다른 경계에서 보여 준다. 여기서는 기존 코드와 기록을 읽었고 실제 사용자 예약을 새로 생성하거나 취소하지 않았다.

기본값은 사용자의 다음 선택을 남겨 둔다

프로젝트를 복사한 사람은 자료만 참고하려 했을 수도 있고 일부 입력을 바꿔 전혀 다른 업무를 준비하려 했을 수도 있다. 원본의 미래 행동을 그대로 이어서 실행할 것이라는 추측은 그 여러 가능성을 지운다. paused는 나중에 명시적으로 선택할 여지를 남기는 기본값이다.

나는 사본을 만든 뒤 대상·입력·계정과 시각을 확인하고 필요한 항목만 다시 활성화하는 흐름을 선호한다. 자동화의 편리함은 같은 일을 빨리 반복하는 데만 있지 않다. 이전 설정을 가져와도 과거의 실행 의도까지 자동으로 따라오지 않게 만드는 것이 실제 업무에서는 더 중요한 편의가 될 수 있다.