---
title: 노드 부수작업 진행 중 Run 차단 + 업로드 프로그레스 표시
status: completed
created: 2026-03-15
priority: high
urgency: later
---

## 문제

파일 업로드가 완료되기 전에 Run을 누르면 config에 asset이 없어서 실행 실패.
업로드 중인지 사용자가 알 수 없음.

## 요구사항

1. **업로드 프로그레스 표시**: 파일 선택 → API 응답까지 사이드 패널에 상태 표시 (업로드 중...)
2. **Run 버튼 비활성화**: 어떤 노드라도 부수작업(업로드 등) 진행 중이면 Run 불가
3. **범용 패턴**: 업로드에 한정하지 않고, 노드가 비동기 작업 중이면 Run 조건 불충족

## 설계 방향

- dag-designer context에 `pendingOperations: Map<nodeId, string>` 같은 상태 추가
- 업로드 시작 시 `addPendingOperation(nodeId, 'uploading')`, 완료 시 `removePendingOperation(nodeId)`
- `pendingOperations.size > 0`이면 Run 버튼 disabled
- 사이드 패널에 해당 노드의 pending 상태 표시

## 검증

- 구현 완료 후 관련 패키지 빌드 성공 확인
- 연관 유닛 테스트 통과 확인
- typecheck 및 lint 에러 없음 확인

## 진행

### 2026-05-05

- 현재 구현을 점검했고, `dag-designer` context가 `nodeStateMap`의 `operationStatus: 'uploading'`, `pendingDescription`, `isRunnable` 파생 상태를 이미 제공함을 확인했다.
- `ComfyFileUploadField`가 업로드 시작/종료 시 context action을 호출하고, `dag-studio` Run 버튼이 `context.isRunnable`이 false일 때 비활성화되는 것을 확인했다.
- 누락된 계약 설명을 `packages/dag-designer/docs/SPEC.md`와 `apps/dag-studio/docs/SPEC.md`에 추가했다.

## 결과

- 노드 부수작업 진행 중 Run 차단 및 업로드 진행 표시 계약을 SPEC에 명시했다.
- 검증: `pnpm --filter @robota-sdk/dag-designer test`, `build`, `typecheck`, `lint`, `pnpm --filter @robota-sdk/dag-studio typecheck`, `lint`, `pnpm harness:scan:specs`.
