- `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>
7.0 KiB
7.0 KiB
검증 보고서: B05 비정규 측점 테스트 반영 및 후속 작업 검증
- 검증 일시: 2026-07-24
- 검증 대상: B05 비정규 측점 테스트 반영 및 편집값 세션 유지 · 복원 · Y축 sticky · 비정규 측점 편집 기능
- 검증 상태: PASS (모든 계획서 항목 구현 완료 확인)
1. 개요
본 보고서는 docs/raw/PLAN.md에 명시된 B05 관련 작업 계획이 소스코드 상에 정밀하고 누락 없이 반영되었는지를 대조 및 검증한 결과입니다. 문법적 오류 및 린트 검사는 사전에 통과하였으며, 최종적으로 설계 요건에 따른 Surgical Edit가 제대로 수행되었는지 확인하였습니다.
2. 기능 체크리스트 및 검증 결과
2.1. [B05] 비정규 측점 테스트 반영
- 구배 블록 값 안 보임 → 좁으면 90° 회전 표기
- 검증:
B05_wf2_Route_UI_Profile_Table.ts의buildSegmentRows에서 블록 너비가 좁아 텍스트가 안 들어가는 경우is-rotated클래스를 추가하고 폰트 크기를 동적으로 축소하는 로직이 적용됨을 확인하였습니다. - 스타일:
B05_wf2_Route_UI_Style.css에서.b05-profile-table__segment-value.is-rotated에transform: rotate(-90deg);가 잘 선언되어 있습니다.
- 검증:
- 비정규 측점 값 열에 구배/곡선 표기
- 검증:
B05_wf2_Route_UI_Profile_Table.ts의buildIrregularColumn에서 비정규 측점의 chainage가 구간 내부에 있는지 혹은 변화점 경계에 있는지 판별하여, 경계일 경우 좌/우 구배 값을.is-split구조로 나누어 표기하고 곡선 R/L 값을 매핑하도록 올바르게 구현되었습니다.
- 검증:
2.2. [B05 후속] 편집값 세션 유지 · 복원 · Y축 sticky · 비정규 측점 편집
- 작업 1: 재탐색 시 "사용자 조작값" 유지
- 검증:
B05_wf2_Route_UI_Profile_Panel.ts의render함수에서routeChanged && store.edited()인 경우 기존store.edits()를carried로 복사하여 새 스토어 생성 후store.replace(carried)로 이월하도록 구현되었습니다. 새로고침 시에도sessionStorage를 이용해 초안을 유지하도록createProfileEditStore가 작성되었습니다.
- 검증:
- 작업 2a: 복귀 시 사이드바 비정규 목록 백엔드에서 복원
- 검증:
B05_wf2_Route_UI_Page.ts의restoreSections에서detail.longitudinal.stations를 순회하며kind === "irregular"인 측점을 수집하고panel.irregularStations.setStations(restored)를 호출하여 사이드바 비정규 목록을 복원하도록 작성되었습니다. - 역산 검증:
B05_wf2_Route_UI_IrregularStations.ts의setStations메서드에서 chainage를 측점간격(interval)으로 역산하여stationNo와remainder를 정확히 계산해 목록을 재구성하고 있습니다.
- 검증:
- 작업 3: 하단 패널 그래프 Y축 스크롤 고정 (sticky)
- 검증:
B06_wf3_ProfileCross_UI_Longitudinal.ts에onYAxis콜백이 추가되어 Y축 눈금 정보를 추출하고,B05_wf2_Route_UI_Profile_Panel.ts에서 이를 받아buildStickyYAxis를 생성하여 SVG 영역에 겹쳐지도록 구현되었습니다. - 스타일:
B05_wf2_Route_UI_Style.css에.b05-profile__yaxis와.b05-profile__yaxis-inner에position: sticky; left: 0; z-index: 3;및 불투명 배경(background: var(--color-surface-raised);)이 적용되어 뒤의 그래프 데이터 누출을 물리적으로 차단합니다.
- 검증:
- 작업 4: 비정규 측점 값 열이 행 제목(sticky 이름표)을 가림 문제 수정
- 검증:
B05_wf2_Route_UI_Style.css에서.b05-profile-table__irregular-col의 z-index를 기존 6에서 4로 하향 조정하였습니다. 이에 따라 z-index 5인 행 이름표(.b05-profile-table__label)가 항상 비정규 값 오버레이 위에 오게 되어 가려짐 현상이 완전히 해결되었습니다.
- 검증:
- 작업 5: 비정규 측점도 상/하·시프트 상/하 편집 버튼으로 제어
- 검증:
B05_wf2_Route_UI_Profile_Edit.ts의createEditOverlay에서irregularStations목록을 받아와addStationButtons를 통해 비정규 측점의 chainage 위치에도 ▲/▼ 및 ↺ 버튼을 렌더링하고, 규칙 측점과 일치하는onStation(조정) 및onResetStation(원복) 파이프라인을 타도록 작성되었습니다.
- 검증:
- 작업 6: 테이블에서 비정규 측점 값 직접 입력
- 검증:
B05_wf2_Route_UI_Profile_Table.ts의buildIrregularColumn함수 내부 계획고 셀에<input type="number">가 추가되었으며, 입력값이 변경될 때onAdjustStation(station.chainage_m, target - plan)을 호출하여 델타 값 조정을 유기적으로 처리하도록 구현되었습니다. 입력 이벤트가 동작하도록 해당 요소의pointer-events: auto복구 스타일도 스타일시트에 누락 없이 반영되었습니다.
- 검증:
3. 확정 데이터 흐름표 (Data Flow Architecture)
기획서 작업 2c의 요구사항에 따라, 경로 및 종단 계획선, 비정규 측점이 각각 어디에 어떻게 저장되고 흘러가는지 매핑한 데이터 흐름은 다음과 같습니다.
| 단계 / 액션 | 프론트엔드 상태 (Client Session) | 백엔드 저장소 (Filesystem / DB) |
|---|---|---|
| 1. 종단 계획선 편집 중 | sessionStorage 초안에 routeId 단위로 AlignmentEdits (station_offsets, curve_radii) 보관 및 in-memory 갱신 |
미반영 (백엔드 영속화 없음) |
| 2. 비정규 측점 추가/수정 | Page irregularStations 상태 및 사이드바 목록 컴포넌트 내부 in-memory 보관 |
미반영 (백엔드 영속화 없음) |
3. 종단 계획선 저장 (profilePanel.save()) |
store.markSaved()를 호출하여 sessionStorage 초안 삭제 및 in-memory base 갱신 |
PUT /route/profile-alignment API를 통해 longitudinal.json 파일에 편집 델타 반영, grade_summary DB 테이블 (longitudinal_sections.data) 저장 |
4. 노선 및 종횡단 확정 (confirmRoute) |
3번 계획선 저장 동시 실행 후, irregularStations의 chainage_m 및 structure 목록을 전송 |
비정규 측점이 포함된 횡단면 데이터 생성, longitudinal.json에 stations 병합 및 파일로 저장, DB의 경로 상태를 CONFIRMED로 갱신 |
5. 페이지 복귀 시 (restoreSections) |
fetchSectionDetail API 결과 중 detail.longitudinal.stations에서 kind === "irregular" 필터를 통해 복원된 목록을 사이드바 및 Page 상태에 다시 재구성 |
longitudinal.json 파일에서 비정규 측점 정보와 저장된 계획선 선형 데이터를 로드하여 프론트로 반환 |
4. 결론
계획서 상에 수립된 비정규 측점 관련 테스트 및 후속 과제들(작업 1~6) 모두 버그나 누락 없이 의도한 동작에 맞게 설계 및 작성되었습니다. 이에 따라 검증을 통과 시키고 완료 건을 계획서에서 계획 이력으로 이관합니다.