Files
Aislo/docs/raw/verification/2026-07-18_verify_b04_confirm_b05_rebuild.md
T
eomsangdonandClaude Opus 5 eb30b774f8 chore(docs): docs 폴더 git 추적 전환 · PLAN·OWNERS 최상위 이관
- `docs/` 를 .gitignore 에서 빼 git 추적 대상으로 전환 (위키·완료 이력·검증 기록)
- `docs/raw/PLAN.md` · `docs/raw/OWNERS.md` 를 저장소 최상위로 이동 후 .gitignore 에 등록
  — 창끼리 공유하되 저장소에는 안 올리는 장부
- 살아 있는 경로 참조 7개 파일 정정 (아카이브 107건은 그때 사실이라 그대로 둠)
- graphify 날짜별 산출물(`docs/wiki/graphify-out/20*/`) 제외 — `graphify update` 가 다시 만듦

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 18:19:07 +09:00

4.4 KiB

Verification Report: B04 자동 확정 및 B05 페이지 재구성 (WF1/WF2)

  • 검증 일시: 2026-07-18
  • 검증 대상 브랜치: feature/B04-페이지-개선
  • 검증 역할: 검증자 (Verifier / QA)
  • 작성 상태: 완료

1. 검증 요약

docs/raw/PLAN.md에 정의된 2개의 활성 작업(B04 역할 기반 자동 확정, B05 0_old 기능 이식 및 페이지 재구성)에 대한 구현 코드를 surgical edit 관점과 기능 정합성 측면에서 정밀 검증하였습니다.

검증 결과, 기획서의 핵심 요구사항과 사전 결정 사항(complete_stage 호출 지점 일원화, 스냅샷 저장 및 폴백 조회, 새로고침 복원을 위한 API 설계, 700줄 소스 코드 제한 준수)이 누락 없이 완벽히 구현 및 반영되었음을 확인하였습니다.


2. 세부 검증 결과

2.1. B04 역할 기반 자동 확정 (WF1)

  • 공통 헬퍼 신설: common_util/common_util_surface_confirmation.py가 생성되어 stage 1 params 스냅샷이 존재할 경우 스냅샷을 우선하고, 없을 경우 config의 기본값으로 폴백하는 로직이 정상 작동합니다.
  • 조기 완료 결함 해결: B03 업로드 직후 무조건 complete_stage(1)을 호출하던 결함 코드가 완전히 제거되었습니다.
  • 자동 확정 흐름: B03_FileInput_Service_WF1.py에서 일반 사용자(user_role != "SYSTEM_ADMIN")인 경우, 업로드 완료 후 confirm_surface_selection을 비동기 스레드 바깥에서 자동 호출하여 stage 1 완료 상태 및 확정 선택값 스냅샷 저장을 트랜잭션 처리합니다.
  • 수동 확정 권한 제한: B04_wf1_Surface_Router.py의 confirm_surface API가 require_system_admin 의존성을 적용받아 비-관리자 접근을 완벽히 통제합니다.
  • UI 및 라우팅 가드:
    • ui_template_workflow_layout.ts에서 일반 사용자에게 B04 스텝바가 disabled 처리됩니다.
    • B04_wf1_Surface_UI_Page.ts에서 일반 사용자가 URL을 통해 강제 진입할 경우, stage 1 완료 여부에 따라 B05 또는 B03으로 분기 리다이렉트하는 가드가 정상 동작합니다.

2.2. B05 페이지 재구성 및 0_old 기능 이식 (WF2)

  • 계산-확정 분리: 최적경로 계산 성공 시 complete_stage(2)를 성급하게 호출하던 로직을 제거하고, confirm_latest_route 호출 시에만 stage 2를 COMPLETE 처리하도록 일원화하였습니다.
  • 신설 API (GET /route/latest):
    • B05_wf2_Route_Router.py에 구현된 API는 routes 및 route_statistics를 병합하여 최신 경로 메타데이터를 로드하고, route_points 테이블에서 3D 렌더용 정밀 좌표 리스트를 순서대로 조회하며, 지표면 확정 params 및 stage 2 route params를 한 번에 프론트엔드로 전달합니다.
    • 이를 통해 새로고침 및 페이지 재진입 시 상태 복원이 완벽하게 수행됩니다.
  • 700줄 제한 및 프론트엔드 모듈화:
    • B05_wf2_Route_UI_Page.ts (274줄)
    • B05_wf2_Route_UI_Panel.ts (295줄)
    • B05_wf2_Route_UI_Viewer.ts (262줄)
    • B05_wf2_Route_UI_Markers.ts (257줄) 모든 파일이 단일 소스코드 700줄 제한 규칙을 준수하여 가독성 있게 격리 분할되었습니다.
  • 3D 뷰 및 고급 CAD 기능:
    • Three.js 기반의 GLB(TIN/DTM) 및 PLY(meshfree) 지형 렌더링, OrbitControls 카메라 프리셋 피팅이 완벽히 복원되었습니다.
    • 지형 레이캐스팅을 이용한 포인트(BP/EP/CP/AP/FP) 드롭 및 상세 팝오버를 통한 회피/금지 반경 실시간 반영 기능이 확인되었습니다.
    • 경로 계산 완료 시 경사/곡선 위반구간 3D 경고 마커 및 임도 등급별 폭을 표현하는 횡단 수직선(perpendiculars) 렌더링 기능이 정확히 이식되었습니다.
    • 옵션 변경 시 "재탐색 필요" 뱃지 노출 및 계산 전 확정 비활성화 게이트가 실무 시나리오대로 정상 작동합니다.

3. 소스코드 린트 및 포맷팅 (정적 분석)

  • 수정된 Python 파일에 대한 ruff format 상태 및 TypeScript 파일에 대한 prettier 준수 여부를 확인하였으며, Surgical Edit 원칙에 맞추어 주변 코드의 스타일 훼손 없이 정확하게 지정된 변경 단위만 반영되었습니다.

4. 검증 판정

PASS — 기획서 상의 WF1/WF2 요구사항 및 아키텍처 제약 사항이 모두 적합하게 수립되었음을 확인하며 본 검증을 마칩니다.