fix(B03): WF1 백그라운드 작업 유실 방지 + 파일 교체 시 개수 초과 오탐 수정
증상 1 — 업로드는 성공하고 stage 0은 COMPLETE인데 stage 1(PREPROCESS)이 NOT_STARTED로 남아 분석이 시작되지 않고 다음 페이지로 넘어가지 않음. 원인: asyncio.create_task 결과를 아무도 붙잡지 않아 이벤트 루프가 약한 참조만 보유 -> GC가 대기 중인 작업을 회수하면 WF1 트리거가 조용히 사라짐. 조치: _BACKGROUND_TASKS 집합에 강한 참조를 보관하고 완료 시 해제, 취소 경로 로깅 및 작업 시작 로그 추가. 증상 2 — 5개 슬롯을 모두 고른 뒤 한 슬롯만 교체하면 개수 초과 오류. 원인: 교체 대상 슬롯을 기존 선택 개수에서 빼지 않고 더해 6개로 계산. 조치: 대상 슬롯을 제외하고 계산, 통과 시 이전 오류 문구 제거. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -244,10 +244,14 @@ export async function renderB03FileInput(root: HTMLElement): Promise<void> {
|
||||
|
||||
function onFileSelected(files: readonly File[], targetSlot?: FileSlot): void {
|
||||
if (files.length === 0) return;
|
||||
if (selectedStates().length + files.length > UPLOAD_MAX_FILES) {
|
||||
// 이미 고른 슬롯을 다시 고르는 것은 "교체"라 총 개수가 늘지 않는다 — 그 슬롯을 빼고 센다.
|
||||
// (빼지 않으면 5개를 다 고른 뒤 하나만 바꾸려 할 때 개수 초과로 막힌다.)
|
||||
const occupied = selectedStates().filter((state) => state.slot !== targetSlot).length;
|
||||
if (occupied + files.length > UPLOAD_MAX_FILES) {
|
||||
pageError.textContent = L("B03_File_Error_Count");
|
||||
return;
|
||||
}
|
||||
pageError.textContent = "";
|
||||
void (async () => {
|
||||
for (const file of files) await assignFileToSlot(file, targetSlot);
|
||||
await detectPausedUploads();
|
||||
|
||||
Reference in New Issue
Block a user