feat(B05,B06): 워크플로우 재정의 — 자동 계산 노란 상태·버튼 개편·초기화

자동 체인 상태 전이 분리:
- confirm_latest_route/confirm_sections에 mark_stage_complete 플래그 추가
- 자동 체인(신규·재확정)은 데이터만 확정하고 stage 2·3을 IN_PROGRESS로 남김
  (스텝바 기존 노란 테두리 = 계산됨·확정 전 상태로 재사용)
- B06 [확정]이 stage 2+3 동시 완료 + 경로 상태 CONFIRMED 보강 후 B07 수량 이동

B05 좌측 패널 개편:
- 포인트 팔레트 + 임도 기준·옵션을 경로 계산 설정 한 컨테이너로 병합,
  [최적 경로 계산] 버튼을 컨테이너 내부로 이동 (가끔 쓰는 무거운 재계산)
- 하단 액션 행 [초기화][임시저장][횡단 이동]으로 교체, 경로 단독 확정 폐지
- [임시저장] = 관로 + 계획선 델타 + 비정규 측점·상단측 저장(mark_stage_complete=false)
- [횡단 이동]/B06 [종단 이동] = 저장 없이 페이지 이동만 (B05·B06 캐시 공유 구조 유지)
- [초기화] = POST /route/reset 신설: 기존 경로 삭제 후 계획노선 CSV 기본값으로
  자동 체인 재실행(파일입력 직후 상태 복원), 분석용 타임아웃 적용

B06 액션 행: [종단 이동][임시저장][확정] 3버튼 구성, locale 키 정비

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-08 10:26:45 +09:00
co-authored by Claude Fable 5
parent ec9943417c
commit 98df22f789
8 changed files with 236 additions and 75 deletions
+13 -6
View File
@@ -118,8 +118,9 @@ async def run_auto_design_chain(project_id: UUID, surface_model_id: int | None =
float(solve_result.total_length_m or 0.0),
)
# 4) B05 경로 확정 — stage 2 완료 전이 포함.
confirm_result = await confirm_latest_route(project_id, None)
# 4) B05 경로 확정 — 데이터만 CONFIRMED, stage 2는 IN_PROGRESS(사용자 검토 대기)로
# 남긴다. 완료 전이는 B06 [확정]이 stage 2·3을 함께 처리한다(2026-08-08 재정의).
confirm_result = await confirm_latest_route(project_id, None, mark_stage_complete=False)
if isinstance(confirm_result, JSONResponse):
logger.error(
"자동 설계 체인 중단(B05 경로 확정 실패): project_id=%s status=%s",
@@ -128,8 +129,11 @@ async def run_auto_design_chain(project_id: UUID, surface_model_id: int | None =
)
return
# 5) B06 횡단 설계 확정 — 미지정 측점을 기본값으로 채워 저장, stage 3 완료 전이 포함.
sections_result = await confirm_sections(project_id, route_id, None)
# 5) B06 횡단 설계 확정 — 미지정 측점을 기본값으로 채워 저장. stage 3
# IN_PROGRESS(스텝바 노란 표시)로 남겨 사용자 검토·확정을 기다린다.
sections_result = await confirm_sections(
project_id, route_id, None, mark_stage_complete=False
)
if isinstance(sections_result, JSONResponse):
logger.error(
"자동 설계 체인 중단(B06 횡단 확정 실패): project_id=%s route_id=%s status=%s",
@@ -292,7 +296,8 @@ async def run_redesign_chain(
logger.info("재확정 체인 설계 이월: project_id=%s %d", project_id, carried)
# 4) B05 확정 → B06 확정(옛 표준단면 설정 이월, 미지정 측점 기본값 채움).
confirm_result = await confirm_latest_route(project_id, None)
# 재확정 후에도 stage 2·3은 IN_PROGRESS로 남겨 사용자 재검토를 받는다.
confirm_result = await confirm_latest_route(project_id, None, mark_stage_complete=False)
if isinstance(confirm_result, JSONResponse):
logger.error(
"재확정 체인 중단(B05 확정 실패): project_id=%s status=%s",
@@ -306,7 +311,9 @@ async def run_redesign_chain(
if old_options.get("standard_cross_section")
else None
)
sections_result = await confirm_sections(project_id, new_route_id, section_request)
sections_result = await confirm_sections(
project_id, new_route_id, section_request, mark_stage_complete=False
)
if isinstance(sections_result, JSONResponse):
logger.error(
"재확정 체인 중단(B06 확정 실패): project_id=%s status=%s",