Files
Aislo/docs/raw/verification/2026-07-24_verify_B05_irregular_stations.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

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.tsbuildSegmentRows에서 블록 너비가 좁아 텍스트가 안 들어가는 경우 is-rotated 클래스를 추가하고 폰트 크기를 동적으로 축소하는 로직이 적용됨을 확인하였습니다.
    • 스타일: B05_wf2_Route_UI_Style.css에서 .b05-profile-table__segment-value.is-rotatedtransform: rotate(-90deg);가 잘 선언되어 있습니다.
  • 비정규 측점 값 열에 구배/곡선 표기
    • 검증: B05_wf2_Route_UI_Profile_Table.tsbuildIrregularColumn에서 비정규 측점의 chainage가 구간 내부에 있는지 혹은 변화점 경계에 있는지 판별하여, 경계일 경우 좌/우 구배 값을 .is-split 구조로 나누어 표기하고 곡선 R/L 값을 매핑하도록 올바르게 구현되었습니다.

2.2. [B05 후속] 편집값 세션 유지 · 복원 · Y축 sticky · 비정규 측점 편집

  • 작업 1: 재탐색 시 "사용자 조작값" 유지
    • 검증: B05_wf2_Route_UI_Profile_Panel.tsrender 함수에서 routeChanged && store.edited()인 경우 기존 store.edits()carried로 복사하여 새 스토어 생성 후 store.replace(carried)로 이월하도록 구현되었습니다. 새로고침 시에도 sessionStorage를 이용해 초안을 유지하도록 createProfileEditStore가 작성되었습니다.
  • 작업 2a: 복귀 시 사이드바 비정규 목록 백엔드에서 복원
    • 검증: B05_wf2_Route_UI_Page.tsrestoreSections에서 detail.longitudinal.stations를 순회하며 kind === "irregular"인 측점을 수집하고 panel.irregularStations.setStations(restored)를 호출하여 사이드바 비정규 목록을 복원하도록 작성되었습니다.
    • 역산 검증: B05_wf2_Route_UI_IrregularStations.tssetStations 메서드에서 chainage를 측점간격(interval)으로 역산하여 stationNoremainder를 정확히 계산해 목록을 재구성하고 있습니다.
  • 작업 3: 하단 패널 그래프 Y축 스크롤 고정 (sticky)
    • 검증: B06_wf3_ProfileCross_UI_Longitudinal.tsonYAxis 콜백이 추가되어 Y축 눈금 정보를 추출하고, B05_wf2_Route_UI_Profile_Panel.ts에서 이를 받아 buildStickyYAxis를 생성하여 SVG 영역에 겹쳐지도록 구현되었습니다.
    • 스타일: B05_wf2_Route_UI_Style.css.b05-profile__yaxis.b05-profile__yaxis-innerposition: 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.tscreateEditOverlay에서 irregularStations 목록을 받아와 addStationButtons를 통해 비정규 측점의 chainage 위치에도 ▲/▼ 및 ↺ 버튼을 렌더링하고, 규칙 측점과 일치하는 onStation (조정) 및 onResetStation (원복) 파이프라인을 타도록 작성되었습니다.
  • 작업 6: 테이블에서 비정규 측점 값 직접 입력
    • 검증: B05_wf2_Route_UI_Profile_Table.tsbuildIrregularColumn 함수 내부 계획고 셀에 <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번 계획선 저장 동시 실행 후, irregularStationschainage_mstructure 목록을 전송 비정규 측점이 포함된 횡단면 데이터 생성, longitudinal.jsonstations 병합 및 파일로 저장, DB의 경로 상태를 CONFIRMED로 갱신
5. 페이지 복귀 시 (restoreSections) fetchSectionDetail API 결과 중 detail.longitudinal.stations에서 kind === "irregular" 필터를 통해 복원된 목록을 사이드바 및 Page 상태에 다시 재구성 longitudinal.json 파일에서 비정규 측점 정보와 저장된 계획선 선형 데이터를 로드하여 프론트로 반환

4. 결론

계획서 상에 수립된 비정규 측점 관련 테스트 및 후속 과제들(작업 1~6) 모두 버그나 누락 없이 의도한 동작에 맞게 설계 및 작성되었습니다. 이에 따라 검증을 통과 시키고 완료 건을 계획서에서 계획 이력으로 이관합니다.