# 2026-09-03 완료 항목 추가 이관 > 사용자와 개발 담당 AI가 검증을 완료한 항목이며, 사용자 지시에 따라 위키 관리자의 2차 교차검증과 별도 검증보고서는 생략했다. > docs/raw/PLAN.md에 추가된 완료 체크 항목과 관련 설명을 이관했다. ### B03 파일 입력 — 양식 정리 (2026-09-03) 사용자 지적 — 「파일 입력 선택 항목이 너무 큼. 안내가 필요하면 B04 좌측 패널 공용양식으로 빼는 게 맞음. 그러면 버튼도 작아짐. 지금은 대중없이 막 넣은 느낌」. - [X] **안내를 좌측 패널로** — `B03_FileInput_UI_Guide.ts` 신설, 공용 오버레이 (`createWorkflowOverlays.optionsContent`)에 실음. 내용 3묶음: 필요한 파일 / 고르는 방법 / 알아 둘 것 (로케일 `B03_Guide_*` 12건 신설). - [X] **패널 양식 = B04~B07 공용양식** (2026-09-03 사용자 재지시 — 처음엔 B03 전용 스타일로 만들었음). 루트 `b03-file__form`, 문단 `ui-collapsible ui-sidebar-section` + 제목 `ui-collapsible__title`(공용 캐럿·접힘), 값은 `b04-surface__form`·`__group`·`__group-legend` 와 동일(gap/padding 16, `--color-surface-raised`, legend `--text-caption`). 실측 — 외곽선·패딩 16px·배경 토큰 일치, 제목 클릭 시 `is-collapsed` 토글 확인. - [X] **본문 축소** — 선택 영역 160px 블록 → 한 줄 바(47px), 긴 문구는 좌측 패널로 이관하고 `B03_File_Select_Hint` 는 한 줄로 교체. 카드는 `min-height: 220px` 폐지 + [선택]을 제목 줄 오른쪽 끝 작은 버튼으로 올림(템플릿에서 헤더로 이동), 빈 칸은 제목 줄만 남김. 진행바·속도·예상완료는 **올라가는 동안만** 표시. - [X] 여백 정리 — 컨테이너 패딩 32 → 20, 그룹 제목 24px → 16px, 카드 격자 간격 24 → 12, 컨테이너 간격 24 → 16. - [X] 좌측 패널이 열리면 본문을 밀어내는 규칙 추가 — B03 은 공용 워크플로 레이아웃이 아니라 일반 레이아웃이라 `.ui-workflow-layout__body` 의 padding 규칙이 없었음(패널이 카드를 덮음). - [X] **후속 3건** (2026-09-03 사용자 지시) - 재접속 현황 배너(「…모두 완료된 프로젝트입니다」)를 좌측 패널 「고르는 방법」 안으로 이동. - [입력 파일 선택]·[임시 보관함에서 불러오기]·[파일 업로드] 를 **한 줄**(`b03-file__pick-row`). - 업로드 완료 항목 목록 삭제 — 결과는 카드가 완료 상태로 보여 줌. `renderUploadResults`· `.b03-file__results` 도 함께 제거(사용처 없음). - [X] **후속 2건** (2026-09-03 사용자 지시) - 임시 보관함 선택 요약(「선택된 보관 자료 없음」·묶음 이름) 삭제, 입력 컨테이너의 「업로드할 파일을 선택하세요」 경고 삭제(다른 사유·업로드 클릭 검사는 유지). - **LAS 없이 설계 토글을 파일 입력 컨테이너로 이동** + 공용 체크 서식 적용. 켜면 지형 자료 **전체**(포인트클라우드·좌표계·래스터)를 받지 않음 — 확장자가 아니라 배정된 카드로 걸러 노선 `.prj` 가 같이 떨어지지 않게 함. 로컬 선택분은 내리고, **이미 올라간 자료(재입력)는 그대로 두고 조작만 잠금**. 필수 판정도 지형 슬롯 전체가 빠짐. - [X] 좌측 패널 **글자 크기까지 공용 양식**으로 (2026-09-03 사용자 지시) — 본문 목록 `--text-body-sm`·`--color-text-body`(B04 `b04-surface__check` 와 같음), 제목 `--text-caption`. 실측 14px / 12px. - [X] **후속 4건** (2026-09-03 사용자 지시) - 선택 영역의 설명 문구를 좌측 패널로 이관 — 본문에는 「입력 파일 선택」만 남김. - [임시 보관함에서 불러오기] → **[임시 보관함]** 로 이름 줄임. - 임시 보관함 버튼 바깥의 점선 테두리 삭제(버튼 테두리와 이중이었음). - 계획노선 도형 카드가 **`.shp` 만** 받음 — CSV 는 내부 계산이 만드는 파일이라 사용자가 넣는 자료가 아님. 컨테이너의 CSV 안내 문구도 삭제. **이미 `.csv` 로 올라간 옛 프로젝트는 그대로 보이게** 서버 파일 매핑에만 `.csv → 계획노선 도형` 예외를 둠 (실측: 「완료 · 용화_계획노선.csv」 유지, 카드 확장자 줄은 `.shp`). - [X] 결함 2건 자체 발견·수정 — ① `--spacing-20` 은 테마에 없는 토큰이라 컨테이너 패딩이 통째로 무효였음(사용자 보고, 16px 로 교체) ② 카드 격자를 2열 고정으로 두니 안내 패널을 연 상태에서 카드 폭 210px 로 눌려 제목이 글자 단위로 접힘 → `auto-fill minmax(260px, 1fr)` + 제목 말줄임으로 교체. - [X] 자체검증 — 공용 브라우저 실측. 카드 높이 **232 → 66px(빈 칸) / 117px(파일 있음)**, 선택 영역 160 → **47px**, 문서 높이 1408px(뷰포트 1304)로 한 화면 남짓. 좌측 패널 폭 320px 과 본문 `padding-left: 320px` 일치 — 겹침 없음. `npm run typecheck`·prettier 통과. ### 화면 검증 (2026-09-03 사용자 지시) 오늘 작업분 화면 검증을 **페이지별로** 나눠 수행함. B03 · B04 · B06 표기 - [X] **B03 파일 입력 흐름 — 비파괴 실측 완료.** - 카드 배정 — shapefile 한 벌을 선택기로 넣으니 `.shx`·`.dbf`·`.cpg`·`.prj` 가 각 카드에 「대기중 · verify_route.*」 로 붙음. 서버 파일이 있는 슬롯(`계획노선 도형`)은 **교체 확인 모달**이 떠 실데이터 교체를 막음 — [취소] 로 물러남. - **CSV 거부 확인** — `verify_route.csv` 를 넣으니 「허용되지 않은 파일 형식입니다」. - 임시 보관함 — 버튼이 모달을 열고 「보관 자료 선택」·빈 목록 안내·[취소]/[확인] 정상, 닫힘도 확인. - 검증 뒤 고른 파일을 ✕ 로 모두 내려 **원래 상태(미등록/완료·LAS 토글 꺼짐)로 복원**. - [X] B04 지표면 3D 나침반 링 — 사용자 확인 완료(2026-09-03). - [X] B06 성토사면 경사길이·배수관 표기 — 앞 절의 수치 대조로 갈음. B05 — 3건 실측 완료(2026-09-03 저녁, 신규 프로젝트 `8cd2e635` 산출분) - [X] **종단 계획선 호 복원** — 살아 있는 종단곡선 63개(억제 0), 중앙종거 5.58~1890.66mm 로 전부 실제 호. 측점 계획고 − 지반고 최대 **0.335mm**(평균 0.047mm, 1mm 초과 0건). 직선 구간 기울기 꺾임 0건(최대 변화 0.0058%) = 접선 성립. L 은 15m 고정이되 변화점 간격이 좁은 4곳에서 0.85m 까지 짧아짐(기하상 당연). - [X] **횡단 설계 프론트 미러링** — 480.0m 계획고 +0.1m 조작 후 유토곡선 반영까지 **94ms** (디바운스 60ms 포함). 절토 4,774.1 → 4,765.9㎥ · 성토 16,690.7 → 16,737.1㎥. +0.3m 상태(4,750.9 / 16,831.3)로 B06 첫 진입 시 토취 11,902.0 · 최종 −11,902.0 까지 **완전 일치**. - [X] **B05 3D 나침반** — 시점별 링 납작함이 sin(앙각)과 일치: ISO 0.577(35.3°, 표고침 25) · 상단 0.999(88°, 침 1.1 = 점으로 눌림) · 정면 0.243(14°, 침 29.7 최장, N 이 화면 위) · 측면 0.243(N 우측). 프리셋 재클릭 시 값 동일 = 재현성 확인. > 주의 — 검증 중 [되돌리기]가 사용자 편집(40m 측점 오프셋)까지 되돌아간 사례가 있었음. > 원값으로 복구했고 화면도 최초 상태로 되돌림. 되돌리기 스택에 사용자 편집이 섞이므로, > 검증 전에는 세션 초안(`b05-profile-alignment-draft:`)을 떠 두고 그것으로 복구할 것. ### B06 횡단 카드 — 성토사면 본래 경사길이 표기 (2026-09-03) 사용자 지시 — 카드 제목행(사면 미교차 경고가 붙는 행) **우측 끝**에 성토사면 길이를 우측 맞춤으로 표기. **구조물(기슭막이·집수정)이 사면을 끊기 전 본래 길이**를 쓰고, 양측 성토면 좌·우 두 값을 다 적음. 전제 (구현 판단, 사용자 확인 필요 시 조정) - 길이 = **경사길이(slant)** — 프로젝트 관행(`FILL_SLOPE_MAX_LENGTH_M` 5m 규정, `성토_비탈면.md` §2)과 같은 기준. - 시작점 = 노견 끝(측구가 그 측이면 측구 바깥), 끝점 = 설계선이 원지반과 처음 만나는 점. - 정본은 백엔드 `design_line` — 구조물은 프론트 오버레이라 이 선을 바꾸지 않음. 즉 design_line 기준 길이가 곧 "본래 길이". - 사면 미교차 측점은 **하한값**(`≥`)으로 냄 — 계산 반폭까지 실제로 잰 길이. `toeFitHalfWidth` 의 추세 외삽은 쓰지 않음(2026-09-03 실측: 740m 측점 좌측이 외삽으로 101.53m 가 나왔으나 지반이 사면과 거의 나란해 값이 무의미했음). - [X] `B06_Section_UI_Cross_Fit.ts` 에 `fillSlopeLengths(section)` 추가 — 기존 `protectedSpan`·`meetOffset` 재사용, 성토측만 `run × √(1+1/n²)`. - [X] `B06_Section_UI_Cross_Card_Chrome.ts` — 제목행 `meta` 끝에 값 span 추가. - [X] 로케일 `B06_Cross_FillSlope`(+Tip), 스타일 `.b06-cross-card__fillslope` 추가. - [X] 자체검증 — 공용 브라우저(「초기화검증-용화」 route 130, 측점 65개) 실측. - 표기 확인 — 성토측이 있는 **52개 카드**에 값이 뜸(양측 절토 13개는 미표기). 양측 성토는 `성토사면 좌 23.04m · 우 3.64m`, 편측은 `성토사면 10.28m`. - 자리 확인 — ⚠ 경고를 DOM 주입해 대조: 경고와 값의 **부모가 같고**(`meta`) 화면 top 이 273px 로 일치 = 같은 행. 값 우변 1340px, 행 우변 1356px(패딩 16px) = 행 우측 끝. 주입은 리로드로 되돌림. - 구조물 무관 확인 — 85.6m(파형강관 D1200 + 집수정 I형) 카드가 구조물이 끊기 전 표준 횡단 사면 **5.34m** 를 그대로 냄. - 수치 대조 — `tmp/tests/helper_b06_fill_slope_length.py` 로 API 원본에서 독립 재계산: 20.0m `23.04 / 3.64` **일치**, 740.0m `≥23.43 / 4.30` **일치**, 40.0m·60.0m·80.0m·85.6m 은 0.06~0.13m 차 — 화면이 교차 판정에 쓰는 2cm 허용오차 (`MEET_TOLERANCE_M`, 기존 사면 끝 판정과 같은 기준) 때문. 0.0m(BP)만 0.69m 차이나 성토 두께 2cm 미만이 0.5m 이어지는 접선형 자리라 실무 의미 없음. - 미교차 17개 측점이 `≥` 로 표기됨. 저장분 설계에는 `slope_unclosed` 필드가 없어 ⚠ 경고는 아직 안 뜸(재계산해야 붙는 값 — 별건). - `npm run typecheck` 통과, prettier 서식 확인. ### B06 횡단 카드 — 배수관 표기 (2026-09-03) - [X] 카드 제목행 구조물 pill 이 `파형강관 D1200` 대신 **`배수관`** 만 적음 (2026-08-17 확정한 `PIPE_DISPLAY_NAME` 규칙과 통일). 관종·관경은 툴팁에 남김. 판정은 `PIPE_TYPES` 목록으로 — 저장 라벨(`resolve_extra_stations`)은 그대로 두어야 함 (재진입 이관이 라벨 문자열로 종류를 되짚음). - [X] 자체검증 — 공용 브라우저 리로드 후 구조물 pill 집계 `{배수관: 9, 세월교: 2}`, 툴팁 `구조물: 파형강관 D1200` 유지. 세월교 등 다른 이름 불변. `npm run typecheck` 통과. - [X] **종단면도 하단 구조물 라벨도 같은 표기** (2026-09-03 사용자 지시). 판정을 `structureDisplayName()`(`_UI_Section_Common`) 한 곳으로 모으고 횡단 카드·종단면도가 함께 씀. - [X] 자체검증 — 리로드 후 `.b06-chart__structure-label` 11개가 `{배수관, 세월교}`, 횡단 pill 도 같은 집합. typecheck·prettier 통과. ### 횡단 설계 계산을 프론트로 미러링 (2026-09-03 사용자 지시) **원칙** — 사용자 조작 중의 계산은 **브라우저 안에서 끝나야 함**. 서버는 [저장]·[확정] 때만 부름. B05·B06 은 자리가 없어 나뉜 한 페이지이므로 세션 캐시를 공유하고 즉시 갱신. **어긋난 지점** — 계획선을 만질 때마다 횡단 단면 계산 전체가 서버로 감: `B05_Profile_UI_Profile_Preview.ts` → `B06_Section_Cross_Refresh.refreshCrossDesigns` → `POST …/cross-design/preview` → `compute_cross_design()` × 전 측점. 절·성토 면적 계산이 파이썬에만 있어(`B06_Section_Engine_Design.py` 659줄 + `B06_Section_Engine_Areas.py` 82줄) 구조적으로 왕복이 필요했음. **결정 (사용자 확정)** — 같은 계산을 **TS 로 미러링**해 둘을 병존시킴. 계획선 선형이 이미 파이썬·TS 1:1 미러인 것과 같은 방식. 대신 **갈라짐을 막는 장치를 반드시 둠**. - [X] `common_util/common_util_cross_design_areas.ts` — `_trapezoid_areas`·`_split_cut_areas` 미러. - [X] `common_util/common_util_cross_design.ts` — `_SectionGeometry`·`compute_cross_design` 미러. config 상수를 TS 에 복제하지 않음 — 표준단면값은 `sections/context` 응답(서버가 config 에서 내려 준 값)을 그대로 입력으로 받음. - [X] 표준단면 기본값·암 경계 기본 오프셋을 세션에 기억 (`B06_Section_UI_Standard_Panel`) — 패널을 안 연 B05 도 같은 값으로 계산해야 두 화면이 같은 결과를 냄. - [X] `refreshCrossDesigns` 를 **로컬 계산**으로 교체 — 호출부(B05·B06) 시그니처는 그대로. 계획고는 `profile_alignment.base_pvi + edits` 를 TS `buildAlignment` 로 풀어서 씀. 선형 저장분이 없는 옛 데이터만 서버 프리뷰로 폴백. - [X] **갈라짐 방지 경고** — 파이썬 2파일·TS 2파일·프리뷰 라우터 머리에 「짝 파일을 함께 고칠 것」 경고 블록. 한쪽만 고치면 두 화면 값이 갈림. - [X] **회귀 테스트** — `tmp/tests/test_b06_cross_design_mirror.py` 10건 통과. `tsc` 로 미러 2파일만 컴파일해 node 로 돌리고 파이썬 결과와 비교 — 토사 편절편성·마루·골, 리핑암 2단계 절토, L형 측구, 발파암 2단계 해제, 포장+측구 해제, 세월교 노면 하강, 급사면 미닫힘, 측구 우측 지정. 스칼라 26필드·측구 제원·노면 끝점·설계선 전 점 일치. - [X] 곁다리 성능 — `hasStaleDesigns`(첫 건에서 중단)로 바꾸고 유효 샘플을 배열당 한 번만 걸러 이진탐색. 프레임당 2.33ms → 0.07ms(실측 33배). 목록이 필요한 곳이 없어져 `staleDesignChainages` 는 삭제. ### B04 지표면 3D — 방위 표시를 3축 트라이어드로 (2026-09-03) 사용자 지적 — 「3차원 표현인데 평면 좌표계가 부적합」. 실측으로 확인됨: 옛 콤파스가 방위각(`atan2(ox, oz)`)만 써서 경사에 따른 남북 압축이 빠졌고, 화면 실제 북쪽과 **사시도 프리셋에서 20.8° 어긋남**(41.6° vs 62.4°, 앙각 27.7° → 남북 0.465배). - [X] 방식 = **축 트라이어드**(2026-09-03 사용자 선택). 범위 = **B04 만**, 이 창 담당. - [X] `B04_PreProcess_UI_Compass.ts` 를 트라이어드로 교체 — 세계 축 N(−z)·E(+x)·Z(+y)를 카메라 기저(r, u)에 투영해 선·글자를 그림. 뒤로 누운 축은 흐리게, 정면으로 오는 축은 짧아진 만큼 흐리게. `update(ox, oy, oz)` 로 높이 성분을 받음. - [X] CSS 를 축 선·글자 클래스로 교체(옛 바늘 polygon 클래스 삭제), 호출부 인자 3개로 변경. - [X] 자체검증(일부) — 기본 시점에서 DOM 좌표가 해석값과 **정확히 일치**: N (28.0, 11.0) · E (45.0, 28.0) · Z (28.0, 27.4) = 상단 프리셋(0, 1, tan2°) 투영 계산값. `npm run typecheck` 통과. - [X] **표기 확정 = 경사 나침반 링** (2026-09-03 사용자 선택, 시안 3종 데모 비교 후). TerriaJS·cesium-navigation 계열. 링·눈금·도북 화살을 **지면 평면 도형으로 두고 투영**해 링이 눌린 정도가 곧 시점 기울기가 됨. 15° 눈금(90°마다 긴 눈금), N·E·S·W 라벨(뒤로 넘어가면 흐림), 표고축 침(내려다볼수록 짧아짐, 점이 되면 Z 라벨 숨김). 위젯 56 → **84px** (라벨이 읽혀야 함). 축 색은 안 씀 — 도북만 강조색. - [X] 자체검증 — 리로드 후 위젯 84×84 렌더 확인, 링 경로·도북 화살 좌표가 기본 시점 (거의 정수직) 기준값과 일치(`M0.00 −33.98…`, 화살 `M0.00 −33.30 L−4.28 −17.14 L4.28 −17.14Z`). typecheck·prettier 통과. - [X] **화면 검증 — 사용자가 직접 진행** (2026-09-03 사용자 지시). 자동 조작으로는 지표면 뷰어 캔버스 좌드래그가 카메라를 안 돌려(포인터 이벤트는 캔버스에 도달) 회전 중 거동을 못 봤음 — 사람이 돌려 가며 링이 지면과 같이 눕는지·N 이 화면 북쪽을 가리키는지 확인할 것. - 시안 데모(3종 비교, 아티팩트): https://claude.ai/code/artifact/cbe3fdec-4374-470e-8e37-03c374a29226 - [X] **자체검증 (2026-09-03)** — `tsc --noEmit` 통과, `tmp/tests` 전체 183건 통과 (미러 10건 신설 포함). 실측: route 127(측점 128) 전 측점 로컬 재계산 **7.5ms** (`tmp/verify/bench_local_cross.mjs`) — 예전에는 같은 일을 서버 왕복으로 했음. 디바운스는 250 → 60ms 로 줄임(왕복이 사라져 손 떼는 즉시 반영). - [X] **화면 검증 — 사용자 몫.** B05에서 계획고를 끌었을 때 유토곡선·횡단 면적이 즉시 따라오는지, B06으로 넘어가도 같은 값인지 확인 필요. ### B05 종단 계획선 — 전체 측점 종단곡선 복원 (2026-09-03) 증상 — B05 종단 그래프의 계획선(점선)이 **직선 폴리라인만**으로 그려짐. 어제 저녁 `3651ad98 feat(B05): 종단 계획선 전체 측점 폴리라인 전환` 에서 `build_alignment(only_explicit_curves=True)` 로 자동 종단곡선을 전부 끈 것이 원인. 요구 기하 (2026-09-03 사용자 확정) — **파일 입력 직후 초기 계산값이자 [초기화] 결과값**. - 계획선은 지금처럼 **모든 측점을 변화점**으로 삼아 이어짐. - 직선과 직선 사이마다 **R(종단곡선)** 이 존재함. - 호는 변화점 **대칭 배치** — 호의 중심이 측점 세로선 위에 놓임. - 호는 좌우 직선과 **접선(tangent)** 을 이룸. - **호와 측점 세로선의 교점이 원지반고 위에 있음** (계획고 = 지반고). 대칭 종단곡선은 꼭짓점을 지나지 않으므로 **중앙종거만큼 꼭짓점을 밀어내는 반복 보정**이 필요함 — 배관 정착 경로(`design_pipe_anchored_profile`)가 쓰는 방식과 같음. - [X] `design_ground_following_profile()` 에 꼭짓점 반복 보정 추가 + `only_explicit_curves` 해제 (`B05_Profile_Engine_Grade_Profile.py`). 지반고 대비 오차가 1e-4m 아래로 떨어질 때까지 최대 12회 되풀이하며, R 은 지정하지 않고 기본 L(15m)을 씀. - [X] `rebuild_alignment_profile()` 의 `GROUND_POLYLINE_BASIS` 예외 제거 — 편집 재구성에서도 호가 유지됨. 저장된 `base_pvi` 가 보정된 꼭짓점이라 편집 델타를 지우면 초기선으로 복귀함. - [X] 프론트 코드 변경 없음 확인 — `B05_Profile_UI_Profile_Alignment.ts:170,326` 이 payload `only_explicit_curves` 를 그대로 따르고, 백엔드가 이제 `false` 로 내보냄. - [X] **호 크기 기준 = 현행 유지** (2026-09-03 사용자 결정). L 을 15m 로 고정하고 R 은 결과값. 법정 최소반경(100m) 미만 호가 생겨도 경고만 남기고 사용자 조정에 맡김 — 기울기 상한을 경고만 하는 현행 정책과 같은 태도. - [X] **자체검증(단위)** — `tmp/tests/test_b05_ground_profile_curves.py` 4건 통과. ① 내부 측점 전부에 호, BVC·EVC 가 측점에서 등거리(대칭) ② 측점 계획고 = 지반고 (최대 편차 < 1e-3m) ③ BVC·EVC 에서 기울기 연속 = 좌우 직선과 접선 ④ 꼭짓점이 지반고에서 중앙종거만큼 밀려남. 전체 스위트 173건 통과. - [X] **자체검증(실데이터 오프라인)** — route 127(2.14km) 종단을 새 엔진에 넣음 (`tmp/verify/check_ground_curves.py`). 측점 128 · 변화점 128 · **호 126개**(저장분 0개), 측점 계획고−지반고 **최대 0.063mm**. L 0.97~15.00m(불규칙 측점 41곳에서 인접 직선 한도로 축소, 경고 58건), R 4~14,696m, 중앙종거 0.4~878.8mm, 대수차 A 최대 46.9%. - [X] **화면 검증 — 확이완료** (2026-09-03 사용자 지시). 저장분은 옛 코드 산출물이라 리로드로는 안 바뀜 — 신규 프로젝트 등록 또는 [경로 탐색 실행] 으로 다시 산출해야 보임. ### 2026-09-03 화면 개선 사용자 지시 6건 중 화면 몫. - [X] **B07 토적도에 유토곡선 세부 항목 표기 - 확인결과 전체 성토구간이라 발생된 문제임** - 토적도는 **B07** 담당(`B07_DesignDetail_Engine_Cad_MassHaul.py`) — 위키의 "B08 토적도"는 낡은 이름. 그 엔진은 이미 평형선·띠·balloon 을 작도하며, 값은 B06 확정 시 저장한 `mass_haul` payload 를 그대로 옮긴다(계산 없음). 즉 화면에 뜬 것이 곧 도면. - 표기 관행(평형선 개수·balloon 기재 항목)은 법령·교본에 근거가 없고 실무 `유토곡선.dwg` 는 압축 DWG라 문자열 추출 불가. 미결 20 — 실무 도면 육안 확인 후 착수. ### 초기 계산 실패 처리 후속-완료처리(노선이 다른 공사지 범위까지 포함. 현재는 서피스를 보고 절단하여 사용하고 사용자에게 종점 정보를 받는다.) 완료 구현과 사용자 검증 기록은 `docs/raw/plans/2026-09-02_plan_user_verified_completed_items.md`로 이관했다. - [X] `325f57d9`의 지표면 범위와 계획노선 좌표 불일치 원인을 별도 조사한다. ### 종단 계획선 초기 설계 — 방식 확정 (2026-09-02 사용자 확정) 완료처리 **확정된 방식** — 초기 계산 파이프는 **횡단배수 측점을 변화점으로 잡고, 그 자리 계획고를 원지반고와 일치**시킨다. 최소고 강제(`enforce_pipe_clearance`)는 기본 해제이고, 시·종점 오프셋도 0이라 양끝도 지반고 그대로다. **종단기울기는 초기 참고값**이며 사용자가 조정한다 — 법정 상한을 넘겨도 경고만 남기고 진행할 수 있다(2026-09-02 사용자 확정). 계획선이 기울기를 스스로 고르지 않으므로 변화점 사이 기울기는 곧 그 구간 지형의 평균 기울기다. - [X] **관 사이 구간의 성토 심도** (2026-09-02 사용자 확정: 「업로드 후 배치되는 배수유역의 결과인 횡단배수 지점이 아니라면 일단 유지, 향후 추가 개선 예정」). - 계획선은 관 측점만 정확히 통과하고 그 사이는 직선(+곡선 완화)으로 이으므로, 관과 관 사이의 골은 성토로, 마루는 절토로 메워진다. 관 간격(용화 평균 97 m)이 곧 계획선이 지형을 얼마나 따라가는지를 정한다. - 용화 실측 — 계획고 − 지반고 평균 `+1.34 m`, 폭 `−6.02 ~ +9.36 m`. 측점 1,106개 중 성토 쪽 783 · 절토 쪽 282. **최대 성토 `+9.36 m` 는 860.0 m 지점**으로, 관 `799.06` 과 `888.99` **사이**다 — 배수유역이 배치한 횡단배수 지점이 **아니다**. 확정대로 이번 판에서는 유지한다. - 최대 절토 `−6.02 m` 는 1,039.0 m 지점(관 `979.92` 와 종점 사이). - 향후 개선 시 검토할 것: ① 관 사이가 길고 골이 깊은 구간에 변화점을 하나 더 두는 규칙 ② 그 자리가 계곡이면 배수 계획 쪽에서 시설을 세워 관 측점으로 승격 ③ 시·종점 오프셋 (`suggested_elevation_offset_m` 자리가 이미 있으나 지금은 `null`)으로 균형을 당기는 것. ### LAS 없는 설계 — 곡선 경고 판정 후속 완료된 도엽등고선 서피스 항목 1~11은 `docs/raw/plans/2026-08-30_plan_las_free_sheet_surface.md`로 이동했다. - [X] **후속 제안(임계와 별계로 현재를 유지하기로 함. )**: 임계 ±5% 안에 드는 유역은 화면에 「임계 근접」을 표시해 사용자가 시설을 고르게 한다. 지금은 1,499mm 와 1,501mm 가 말없이 다른 시설이 된다. - 같은 계획노선에서 LAS는 `84.3 관D1000 / 149.73 세월교 / 200.92 BOX암거 / 275.71 관D800`, 도엽등고선은 `84.3 관D1000 / 149.73 세월교 / 200.92 관D800 / 297.71 관D800`. - 3·4번째 시설의 종류와 위치가 다르다(BOX암거→배수관, 275.71→297.71m). 지형 표고가 달라 유역·계곡 판정이 갈리는 것 자체는 자연스럽지만, 도엽 쪽이 계곡을 얕게 잡아 BOX가 관으로 내려간 것이라면 기준을 맞출지 판단이 필요하다. ### B08 토적도·유역도 후속(완료처리) > 2026-08-30 확인 — "토적도 접근 안 됨"은 **결함이 아니었다**. 유토곡선은 프론트가 > 계산해 B06 [저장]·[확정] 본문(`mass_haul`)으로 보낼 때만 종단 정본에 남는다. > 자동설계 체인은 본문 없이 확정하므로 체인 직후에는 없고, 정상 경로에서는 B06 확정을 > 거쳐야 B07로 들어오므로 문제가 없다(워크플로 바의 `상세설계`도 그전엔 비활성). > 확정을 거친 `c1bb453f`는 200(엔티티 157), URL로 건너뛴 신규 프로젝트만 404였다. 구현·검증 완료 범위는 `docs/raw/plans/2026-08-30_plan_B08_masshaul_watershed_drawings.md`, 위키는 `docs/wiki/pages/B08_DesignDetail/B08_drawing_masshaul_watershed.md`로 이동했다. - [X] 운반 블록이 있는 실노선에서 띠 balloon·경계현을 확인한다. ### 좌표계 라벨 오용 수정 — 상세 배수유역 표기 누락 (2026-09-01)(검증 완료) **증상**: B04 상세 배수유역이 지도에 하나도 안 그려진다. **원인**: 노선 CSV `crs_epsg` 열(라벨)을 좌표계로 써서 사업지 좌표계(.prj) 격자 산출물을 잘못 역투영. 용화 실측 — 라벨 5179 / 실제 5176, 유역이 lon 119.79 · lat 23.08(대만 남쪽 바다)로 나가 화면 밖. `load_design_route()`는 `crs_input`만 갱신하고 `epsg` 라벨은 CSV 값 그대로 둔다(2026-08-31 확정) — 라벨을 좌표계로 쓰던 자리가 4곳 남아 있었다. - [X] **적용 조건(사용자 조치)**: 기존 프로젝트는 산출물이 옛 원점·옛 좌표계로 남아 있다. ① 도엽 서피스는 다시 만들어야 원점이 맞고 ② 세부유역은 B04에서 확정을 다시 저장해야 좌표계가 기록된다. 그 전까지는 옛 파일 그대로 동작한다(되읽기 폴백). ### 프로젝트 작업 좌표계 일원화 (2026-08-31 신규)(검증 완료) 입력·shapefile 수용은 `docs/raw/plans/2026-08-31_plan_planned_route_shapefile_prj.md` 로 이관했다. 남은 것은 좌표계 기본값이 코드 곳곳에 흩어진 문제다. - [X] 라이다는 좌표 변환을 한 번도 거치지 않고 원좌표로 남는데, 도엽은 노선 좌표계로 재투영된다. **둘의 EPSG를 대조하는 코드가 없다** — 다르면 조용히 어긋난다. - [X] 방향: 작업 좌표계 = 라이다 PRJ 우선, 없으면 노선 좌표계. 불일치는 B03 입력에서 차단.