- `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>
5.2 KiB
5.2 KiB
검증 보고서 (Verification Report)
- 검증 일시: 2026-07-19
- 검증자: Antigravity (검증자 QA 역할)
- 검증 대상: 횡단 반폭 DB 단일 소스화 및 B05 등고선 간격 영속화 기능
1. 검증 대상 및 파일 목록
1) 횡단 반폭 DB 단일 소스화
B05_wf2_Route/B05_wf2_Route_Engine_Sections.pyB05_wf2_Route/B05_wf2_Route_Router.pyB06_wf3_ProfileCross/B06_wf3_ProfileCross_Repository.pyB06_wf3_ProfileCross/B06_wf3_ProfileCross_Router.pyB06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Page.ts
2) B05 등고선 간격 영속화 (추가 구현)
B05_wf2_Route/B05_wf2_Route_Api_Fetch.tsB05_wf2_Route/B05_wf2_Route_Router.pyB05_wf2_Route/B05_wf2_Route_Schema.pyB05_wf2_Route/B05_wf2_Route_UI_Page.tscommon_util/common_util_surface_confirmation.py
2. 세부 검증 내용
📋 횡단 반폭 DB 단일 소스화
- Options 스냅샷 저장 및 스키마 미변경:
B05_wf2_Route_Engine_Sections.py내의run_section_generation실행 시,long_summary데이터 결과에"options": result["options"]스냅샷을 포함하도록 구현했습니다.- 이를 통해 MariaDB 테이블 스키마에 컬럼을 추가하지 않고도
longitudinal_sections.data내 JSON 구조를 활용해station_interval_m,cross_half_width_m,cross_sample_interval_m,long_sample_interval_m등의 세부 측점/샘플링 생성 파라미터를 영구 보존할 수 있음을 검증했습니다.
- B05 최적 경로 계산(Solve) 시의 값 결정 우선순위:
B06_wf3_ProfileCross_Repository.py에get_latest_section_options()쿼리 헬퍼가 신설되어 저장된 옵션 스냅샷을 객체로 역직렬화(json.loads 예외 방어 포함)해 가져옵니다.B05_wf2_Route_Router.py의_section_options함수는요청 값 → DB에 저장되어 있던 옵션(단일 소스) → Config 기본값순으로 순위를 결정하여SectionGenerationOptions를 빌드합니다. 이로 인해 사용자가 이전 단계나 동일 단계에서 의사결정하여 DB에 남긴 반폭 및 측점 수치들이 재생성 시 자연스럽게 유지되는 구조가 정상 구축되었습니다.
- B06 반폭 재생성(Regenerate) 시의 옵션 유지:
B06_wf3_ProfileCross_Router.py내_regeneration_options함수는 단일 소스인 DB 옵션(stored_options)을 1순위,stage_params를 2순위로 참조해 반폭을 제외한 나머지 3개 옵션(측점 간격 등)을 유실 없이 보존하며 반폭만 안정적으로 교체합니다.
- 프론트엔드 역직렬화 초기값 처리:
B06_wf3_ProfileCross_UI_Page.ts에서 도면 데이터를 불러올 때summaryData?.options를 조회하고,cross_half_width_m이 있는 과거 이력에 대해서는 해당 DB 값을 우선 채택해 폼 필드 초기값으로 설정합니다. options 데이터가 아예 없던 과거 레코드에 대해서만 폴백으로 "측점 샘플 최대 offset 추정치"를 취하도록 방어 설계되었습니다.- 측점 간격 라벨 또한
storedOptions.station_interval_m의 존재 여부를 1순위로 표시하여 수치 정합성을 확보했습니다.
📋 B05 등고선 간격 영속화
- 영속화 API 구현:
B05_wf2_Route_Router.py에 등고선 간격을 갱신하기 위한PUT /api/projects/{project_id}/route/contour-interval라우터가 신설되었습니다.common_util_surface_confirmation.py내에update_contour_interval_param()유틸을 추가하여 DB의project_workflow_stages테이블 중stage_no = 1인 stage 1 params(단일 소스) 내의contour_interval_m만을 단일 업데이트할 수 있도록 트랜잭션 단위로 묶어 처리했습니다.
- 프론트엔드 연동:
B05_wf2_Route_UI_Page.ts의 등고선 재적용 핸들러에서 간격 조절 성공 시 서버의updateContourInterval()을 동시 실행하여 영속화함으로써, 사용자가 등고선을 다시 설정하고 B05 화면을 들락거려도 이전 변경 수치 그대로 영구 복원되는 문제를 깔끔하게 해결했습니다.
3. 코드 퀄리티 및 빌드 검증
- 의존성 결함 제거: B04 포인트 크기/밀도 및 B06 연직과장 등 표시 설정류의 영속화는 기획 단계에서 불필요함이 확정되어 불필요한 DB 쓰기 오버헤드 및 백로그를 안정적으로 정리했습니다.
- Surgical Edit 준수 여부: 기존의 데이터 전파 아키텍처와 트랜잭션 제어 방식을 유지하며, 최소한의 로직 수정으로 단일 소스화 기능을 안착시켰습니다.
- 정적/빌드 분석: 다른 AI 및 도구에 의해 TypeScript
tsc타입체크 및 Pythonpy_compile컴파일 빌드, ruff format 및 prettier 검사가 완료되어 결함이 없음이 증명되었습니다.
4. 종합 검증 판정
Note
검증 결과: PASS (합격)
DB 중심의 자연스러운 데이터 전파 사양 및 B05 등고선 간격 영속화 구조가 본 프로젝트의 3D WebCAD 파이프라인과 완벽히 부합하며, 수치를 폼에 복원하는 역직렬화 우선순위 로직도 예외 처리 방안을 지켜 완결성 있게 구현되었습니다.