- Corridor_Build: design_line을 차도/노견/측구/절토/성토 5종으로 분류,
catch point(설계선-지반 교차)로 점유 폭 산출, 노선 폴리라인 2m 세분
중간 프레임 보간 (계산식 재구현 없이 백엔드 design_line 소비만)
- Corridor_Mesh: 종류별 색 리본 BufferGeometry 조합(멀티 스윕)
- Corridor_Clip: catch line 스트립으로 지형 삼각형 경계 재절단(셀 단위
판정·정점색 보간), 원본 보존 — [예상형상] 토글 OFF 시 원지반 완전체 복원
- Viewer: 원본/클리핑 지형 두 벌 스왑, 비탈 최외곽 z 지형 투영(심 보정),
클립 rAF 비동기, 흑백·dispose 연동
- Panel: [예상형상] 토글 (기본 ON)
- Corridor 엔트리: 설계 입력 FNV-1a 해시 버전, base64 Float32 JSON 직렬화,
최초 빌드 즉시 저장 + 임시저장·페이지 이동 시 dirty 저장, SPA 메모리 캐시
- Router_Corridor(신규)+main 등록: GET/PUT corridor 파일 보관
(B05_Profile/corridor/, atomic, 64MB 상한)
- 검증: tsc·ruff·pytest 5/5, 공용 브라우저 실조작(토글·B06 변경 왕복·
저장 왕복 네트워크 실측), 저장본 리본 수치 대조
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
① 집수정 조작을 9키(3×3)로 — 십자 축은 이동(◀▶ 좌우 / ▲▼ 사면 대각),
네 모서리는 크기(⇕ 내부 높이 · ⇔ 내부 폭), 가운데는 초기화. 기슭막이
십자와 같은 축 규칙·버튼 크기라 행열이 맞는다. I형은 내공 개념이 없어
네 모서리만 숨긴다.
② 좌우 반전 해소 — 집수정 lateralM이 계류측(outward) 기준값에 그대로 묶여
유입이 우측인 측점에서 ◀가 화면 오른쪽으로 갔다. 버튼을 **화면 기준**으로
받아 카드가 부호를 환산한다. 노견 안쪽(음수)은 0에서 멈추고 토스트로 알린다.
③ 집수정 계류측에 **유출측과 같은 성토부 체계** 적용(ㄴ·ㄷ형) — 구조물 계류측
끝이 원지반 위로 나오면 1:1.2 성토부선을 긋고, 5m를 넘으면 다단 기슭막이를
둘 수 있다(키 , 단 수 행 별도). 원지반 안이면 종전 절토선,
I형은 관 하단 3도 되메움선이 맡는다. 좌우 이동 시 마감선을 억제하던 임시
조건은 제거했다(급경사 선의 근본 원인은 이미 설계선 트림에서 해결).
- 700줄 유지: attachBasin(Basin)·buildExtrasAt(Extra) 추출 + 주석 정리
검증: 4+4.3 ㄴ형 좌우 2m — 성토부선 2.41m가 원지반에 0.001m 오차로 접함
(종전 마감선 없음) · ◀ 클릭 시 4+4.3(유입 좌)·13+15.7(유입 우) 모두 화면
왼쪽으로 이동 · 9키 3×3 좌표 정렬 확인 · tsc·ruff·prettier 통과 ·
pytest 148 passed, 7 skipped · B06_Section 700줄 초과 0건.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- resources/knowledge/knowledge/ 아래 남아 있던 .obsidian 설정과 기본 노트 삭제
- .gitignore에 **/.obsidian/ 추가 — 볼트 설정은 추적하지 않는다
- 03_미결_및_확인사항.md BOM 제거
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 유입이 유출보다 높아야 하므로 유입을 내리면 유출도 따라 내려간다. 유출이
원지반에 묻히고 3도 절토선이 지반과 다시 못 만나는 높이면 **유입도 그만큼
못 내려간다**(placeInletWall의 outletGuard, 아래 방향만 되돌림)
- 횡단 카드의 배수관 기하 계산 입력을 표시 반폭으로 자른 샘플 → **전체 샘플**로
변경(2026-08-22 사용자 확정: 표시 반폭은 보기용, 계산은 계산용 전 구간)
- 유입 배치 로직을 placeInletWall(Solve)로 이전
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 관 유도 접속선을 0도 → **3도**로: 유입측은 계류 쪽 오름(물이 관으로),
유출측 매몰 절토선은 계류 쪽 내림(물이 밖으로). 집수정 I형 되메움선도 동일
- 모든 유도선·성토부선 끝점을 격자점이 아니라 **선형 보간 교차점**에 붙여
선이 원지반을 미세하게 벗어나던 문제 해소(2026-08-22 사용자 지적)
- 카드 자동 줌아웃: **구조물 없는 상태**의 설계 절·성토선이 원지반과 만나는
지점(+0.5m)이 표시 반폭 밖이면 그 카드만 반폭을 넓혀 그린다. 보유 샘플
범위를 넘는 경우는 기존 전역 반폭 재생성 경로(applyPanelToAll)가 담당
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
① 십자 우측 하단 ≡ 버튼 — 벽 사이 사면 구간을 같게 재배치(끝 성토부는 지형
결정값이라 제외). 다단 연쇄(아랫단 바닥 하강) 때문에 1회 분할이 아니라
구간 오차를 d로 되먹임하는 수렴 반복(≤8회, 허용 0.05m)으로 푼다.
② 유입 기슭막이 관 시작 접속선: 관 하단점이 원지반보다 위면 0도 성토선
(지반 교차에서 정지), 아래면 0도 1m 후 표준 절토 경사(1:n)로 지반까지.
③ 유출 마지막 구조물 시작점이 원지반에 묻히면 0도 절토선을 지반 교차까지
연장, 교차가 없는 자리는 이동 금지(배관 벽·추가 벽 공통 클램프).
- 배관 벽 4축 배치를 placePipeWall(Solve)로 추출 — Geom 700줄 유지
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 유출 관 하단 끝점·다음 단 성토선 시작점의 기준을 기준선(anchor)이 아니라
**실제 바닥(전면 근입 심화 반영) +0.5m**로 통일 — 가파른 지반에서 바닥만
깊어지고 관이 벽 위쪽에 떠 보이던 문제 해소(2026-08-22 사용자 지적)
- 추가 기슭막이 이동 한계 = 원지반 매몰 자리 금지: 이음선 상단이 지반 아래
(통째 매몰)이거나 자기 성토선 시작점이 지반 아래 0.05m 이상이면 그 앞에서
멈춤(상하 먼저, 다음 좌우 되돌림) — 자동 자리조차 매몰이면 그 단은 불가
- 배관 기슭막이 기본 높이 = 재질 무관 2.0m(찰·콘크리트 기본 2.5 → 2.0 정정)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 한 줄 요약(관 길이 · 바깥 · 위) 대신 3행: 관 길이 / 좌우 / 상하(사면)
- 조작 없으면 각 행에 '자동' 표기 — 행 수 고정으로 레이아웃 안정
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 추가 기슭막이(단): 직접 입력 제거 — 높이와 동일한 [- 값 +] 형식(0단 표기)
- 값 조작 버튼 26×22 고정 폭 — 높이·단 수·십자 이동의 열이 맞는다
- 값 표시 폭 3.5em 고정(높이 2.0m / 0단 동일 열)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 유출 관 하단 끝점 = 벽 바닥 +0.5m 기준선과 전면 경사선(1:0.3)의 교차점
(성토부선 시작점과 동일 자리) — 정수 맞춤 재배치에도 동일 적용
- 근입 0.5m는 경사선(전면) 측 깊이 기준 — 전면 발끝 지반 아래 0.5까지
수렴 반복으로 내림(배관 벽·추가 벽 공통, 뜬 벽은 기준선 아래 0.5)
- 카드 내부 조작(조정창 등)으로 다시 그려져도 줌·팬 배율 유지
(측점별 상태 보관, ZoomPanState)
- 조정창: 재질 행을 높이 행 위 별도 행으로(폭 축소 — 한계는 툴팁),
추가 기슭막이(단) 행은 유출 벽에서 항상 표시(레이아웃 널뜀 방지)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 좌우 ◀▶ = 노견(추가 벽은 윗단 0.5m 기준선) 수평 연장 평행이동 —
성토선 물매 1:1.2·상단 표고 불변, 지반에 못 닿으면 바닥 뜸 허용
- 상하 ▲▼ = 성토선을 타는 대각 이동(수평 성분 1m), 위 한계 =
최소 성토고·토피(역경사), 추가 벽은 윗단 하단 관통 금지
- 높이 ±0.1m: 배관 벽 2.0~재질한계(기본 2.5, 메쌓기면 2.0로 절삭),
일반 벽 0.5~재질한계(기본 1.5). 높이 기준 = 근입 0.5 위 기준선~상단
- 재질 선택(메쌓기 2.0/찰쌓기 3.0/콘크리트 5.0m) — 한계 초과 시
토스트로 재질 변경 안내, 자동 높이는 기본값 고정(사용자 확정)
- 다단 단 수: 숫자 입력 + +/- 버튼 병행, 입력기 스피너 제거
- 저장 스키마: revetx 값이 {x,d,h,m} 객체로 확장(구 숫자 형식 호환)
- 인터페이스 3종을 Wire로 이전(Cross_View 700줄 제한)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 벽 사이 성토사면 = 정확히 1:1.2 — 벽 높이를 자리에서 역산(닫힌식),
0.1m 눈금 올림 제거(물매 정확 유지 우선)
- 아랫단 상단은 윗단 하단(수평 기초) 관통 금지 — 안쪽 이동 한계
- 다음 단 성토선 시작 = 윗단 하단 +0.5m 수평선 × 전면 경사선(1:0.3) 교차점
(배관 벽의 관 하단 꼭짓점과 같은 자리)
- 시작점이 원지반 아래(벽 0.5m 이상 매몰)면 성토 불필요 — 다단 종료
- 추가 방식 = 유출 벽 조정창의 단 수 숫자 입력(+/- 버튼 대체),
지형 허용 단 수 초과 시 토스트로 가능한 단 수 안내 후 되는 만큼만 반영
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 보호공(돌붙임) 띠 삭제, 윗면 선만 성토부선(계획선)으로 유지 — 구간별
사면길이·5m 초과 여부 툴팁 표기
- 성토부 5m 이상이면 조정창 +로 추가 기슭막이(배관 없는 동일 형상 벽)
계단식 추가 — 자동 자리는 배관용과 같은 규칙(1:1.2 최소 자리)
- 추가 벽도 ◀/▶/↺ 이동(안쪽 한계 = 앞 구조물), 마지막 벽 - 삭제
- 개수·이동량 세션 보관(b06:extrawall / revetx extra{n} 키)
- 700줄 제한: Extra(성토부선·추가 벽)·Wire(카드 배선) 분리 신설
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 관 계산 시작점은 지반에 맞췄지만 그림의 끝은 벽 안쪽 변에서 잘려
꼭짓점이 지반과 어긋나 보였다(2026-08-22 사용자 — 파란 관선이
녹색 지반선과 만나야 함).
- I형은 마감면 기준점을 관 하단선-원지반 교점으로 이동(기울기는 벽과
나란히 유지). invert가 토피 상한에 걸려 지반보다 낮아도 그림의 관은
지반 위에서 시작한다.
- 검증: 13+15.7 I형 실화면 SVG — 관 유입 하단 꼭짓점 vs 지반 보간
0.1px 차(접점).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- I형 벽 자리 = 상단 도로측 꼭짓점이 노견 끝 지점에 닿는 자리
(2026-08-22 사용자 확정 — 우측 집수정이면 상단 좌측점이 접점).
벽이 도로측으로 1:0.3 기울므로 하단은 그만큼 계류측 바깥.
종전 '관 유입단에서 내공 1.0m' 자리 폐지.
- 유입 배관 위치는 유지(노견 끝 + 1.0m) — 벽이 안으로 오면서 관 끝이
벽을 지나 집수정 안으로 들어간다. 마감면은 벽 변 복사 대신 관 끝
자리에서 벽과 나란한 기울기로 절단.
- L형 바닥판·ㄷ형 반전벽 구조는 유지(명칭 재조정은 추후).
- 검증: 13+15.7 SVG 실좌표 — 벽 상단이 설계선 노견 꺾임점 접점,
관 끝이 벽 바깥면 통과.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 안쪽 당김 클램프를 1:1.2 성립 자리에서 노견(도로 밑 침범 금지)으로
완화(2026-08-22 사용자 재확정 — 13+15.7 확인 요청). 1:1.2 자리
안쪽은 ① 벽 높이 증가 ② 형태별 한계(찰3.0/메2.0) 도달 시 바닥
띄움(원지반 이격, 하부 지지 구조물 별도)으로 물매·노견을 지킨다.
- 안쪽 한계 토스트 문구를 노견 기준으로 교체.
- 검증: 13+15.7 실조작 — 안쪽 4→8m 연속 이동, 관 14→9m, H=2.0
한계 유지, 바닥 이격 0.18→0.61m 툴팁 표시.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- H 표기 = 관 invert~상단(근입 제외)로 복귀 — 기초는 시공 시 묻히는
부분이라 높이·한계 검사(찰 3.0/메 2.0) 모두 이 기준(2026-08-22
사용자 확정). 수평 기초 하단선은 유지.
- 검증: 4+4.3 H=1.5(메 한계 2.0)·13+15.7 H=1.3 툴팁 확인.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 하단선 = 수평(기초공사 기준 — 2026-08-22 사용자 확정). 깊이는 벽
발자국 안 원지반(또는 관 invert) 최저점 − 0.5m. 종전 지반 추종
경사 하단 폐지.
- 전면 1:0.3 경사선을 하단까지 연장 — 바닥이 깊어진 만큼 발끝이
바깥으로. 발끝 지반이 더 낮으면 한 번 더 내림(2-pass).
- WallLayout.height = 상단~하단 전체 높이(근입 포함)로 변경 — 툴팁
H 표기 기준. 설계 파라미터(폭·기움)는 invert 기준 높이 유지.
- 검증: 4+4.3(H 2.0/2.1)·13+15.7(H 1.9) 하단 수평·관 감싸기 SVG
실좌표 확인.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 조정창 ◀/▶ 요청이 한계에 잘려 벽이 안 움직일 때 이유를 토스트로
알린다(2026-08-22 사용자 요청, 13+15.7 참조).
· 안쪽 한계: 성토 물매 1:1.2가 깨지는 자리(배관 최소 길이)
· 바깥 한계: 조정 범위 초과
- 그 벽이 선택된 조작 중에만 띄운다 — 리로드로 복원된 세션 값에는 침묵.
- 검증: 공용 브라우저 실조작 — 13+15.7 안쪽 시도 토스트 표시,
바깥 정상 이동 시 무음.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 관 하단선은 관 시작점과 유출 벽 하단선 중점(invert)을 잇는 직선으로
고정 — 정수 맞춤이 벽을 옮길 때마다 축·법선 재유도(deriveAxis).
종전엔 옛 축을 그대로 늘려 가파른 지반(13+15.7)에서 관이 벽 바닥
아래로 삐져나갔다.
- 관 시작 기준도 유입 노견점이 아니라 실제 관 시작점(집수정 내공 벽)
으로 통일.
- 끝단면 교점을 마감면 선분 안으로 클램프(clampToFace) — 연장선
교차로 벽 밖에 꼭짓점이 생기는 것 차단.
- 검증: 13+15.7 SVG 실좌표(관 꼭짓점 385→371, 벽 하단 379 위),
4+4.3 회귀, dz 스윕 24건 이탈 0건.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 자동 자리 = 물매 1:1.2가 딱 성립하는 가장 안쪽(노견 최소) 지점.
관 m단위 올림 잔여만 유출 벽 바깥 이동으로 흡수(minShoulderWallOffset).
사면 끝 밖 자리는 급물매 교정일 때만 인정 — 얕은 성토 폭주 방지.
- 손으로 민 벽은 관 정수 맞춤이 절대 옮기지 않음 — 한쪽 이동 시
반대쪽 벽 동시 이동(관 +2m) 소멸. 표기 길이만 올림(m).
- 안쪽 당김 한계 = 1:1.2 성립 자리(우선순위: 배관 연장 > 높이 증가 >
바닥 띄움). 1:1.2 자리가 없는 지형 폴백에서만 높이 증가·바닥 띄움
(solveWallVertical, 한계 찰3.0/메2.0).
- 기슭막이는 관을 감싼다: 하단은 항상 관 invert 아래 0.5m 확보,
뜬 바닥도 동일(뜬 공간은 별도 지지 구조물 — 추가 예정).
- 검증: 4+4.3 관 13m→9m·노폭연장 1.52→0.08, 13+15.7 UI 조작
(◀▶↺·클램프·단독이동) 및 dz 스윕 24건 물매 이탈 0건.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
물매를 1:1.2~2.0 범위에서 역산하던 방식을 걷어내고 **수평 1.2 : 수직 1 고정**으로
바꿨다(2026-08-21 사용자 확정). 벽이 1:1.2 사면이 닿는 자리보다 밖에 있으면 물매를
완만하게 바꾸는 대신 **노폭을 그만큼 늘린다** — 기슭막이를 바깥으로 1m 밀면 노폭이
약 1m 늘어난다.
- fillSlopeOf가 [원 노견 → 연장된 노견 → 벽 이음선 상단점] 폴리라인을 돌려주고,
설계선 오버레이가 그 폴리라인을 그린다(노면 연장 구간이 수평으로 붙는다).
- 반대로 벽이 안쪽이라 물매가 1:1.2보다 급해지는 자리는 노폭으로 못 맞춘다(도로를
좁힐 수는 없다) — 자동 자리를 1:1.2가 될 때까지 바깥으로 미는 처리를 유지한다.
- fillSlope.roadWideningM 신설, 툴팁에 "노폭 연장 x.xxm" 표시.
검증(계획고 스윕 24케이스): 물매 23건이 정확히 1:1.200(나머지 1건은 성토고 0.2m로
사면이랄 게 없는 측점). 벽 이동 시험 — 밖으로 1m씩 밀 때 노폭 연장 1.52→3.27→
4.22→5.21m, 물매는 계속 1:1.200. tsc 통과, pytest 148 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
기슭막이 기본 자리를 사면 끝으로 바꾼 뒤 물매가 규정보다 급해지는 측점이 생겼다
(13+15.7 실측 1:0.865 — 성토_비탈면.md §1의 1:1.2~2.0 위반). 1:1.2는 지켜야 하는
하한이므로, 사면 끝 자리의 물매가 그보다 급하면 **1:1.2에 닿을 때까지 바깥으로**
민다. 지반이 1:1.2보다 급해 끝내 못 맞추면 사면 끝을 그대로 쓰고 경고로 알린다.
물매 계산의 이음선 위치도 바로잡았다 — 자리 기준이 하단선 중점으로 바뀐 뒤에도
`REVET_TRAP_TOP_M`을 그대로 더해 실제보다 0.3m 바깥으로 보고 있었다.
`fillWallBaseWidth()`로 중점↔이음선 환산을 한곳에 모았다.
검증(계획고 스윕 24케이스, 새 계획노선): 물매 최소 1:1.202 — **1:1.2 미만 0건**
(종전 0.4~0.9까지 나왔다). 페이지 실데이터로도 13+15.7 1:1.206 확인.
tsc 통과, pytest 148 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
집수정 벽 높이를 성토 경사선과의 교점으로 잡던 방식을 걷어내고, **관 아래 여유
0.5m + 관경 + 관 위 여유 0.5m**로 정한다(2026-08-21 사용자 확정). 위 여유는
기슭막이와 같은 REVET_FREEBOARD_M을 써서 좌·우 표현이 어긋나지 않는다.
BASIN_BOTTOM_CLEARANCE_M(0.5) 신설. 종전 바닥판 두께 0.45가 아래 여유 자리를
겸하고 있었다.
검증(13+15.7, D800): 집수정 깊이 1.8m = 0.5 + 0.8 + 0.5, 바닥 여유 0.5 확인.
계획고 스윕 24케이스 문제 0. tsc 통과, pytest 148 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 조정창 숫자가 실제와 갈렸다. 안쪽으로 계속 누르니 "안쪽 10.0m"까지 올라가는데
벽은 노견 한계에서 멈춰 있었다. 기하가 **실제 적용한 이동량**(revetShift)을 돌려
주고, 카드가 그 값을 제어기에 되담는다 — 이제 한계에 닿으면 숫자도 멈춘다.
- 안쪽으로 당기면 사면이 짧아져 물매가 급해진다. **1:1.2(가장 급한 한계)**를 넘지
않는 자리까지만 들어가게 막았다(2026-08-21 사용자 지시). 바깥으로 밀 때는 완만해
지므로 막지 않고 범위 밖이면 경고로만 알린다.
검증: 4+4.3은 자동 자리가 이미 1:1.21이라 안쪽 이동 0(차단), 13+15.7은 −1m까지
허용(1:1.61)하고 그 이상 차단. 조정창 숫자도 같은 자리에서 멈춘다. 두께 16케이스
0.450 고정, 계획고 스윕 24케이스 문제 0. tsc 통과, pytest 148 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
유입 벽을 조정창으로 밀면 유출 벽이 자동으로 관 길이를 맞추다가 **폭 흡수 폴백**에
걸려 0.45→0.85m로 부풀었다(4+4.3 화면 확인: 좌 0.45 / 우 0.85). 조정한 벽만 폭을
지키게 했던 앞 조치로는 반대편 벽이 보호되지 않았다.
폭 흡수를 아예 없앤다 — 벽 두께는 항상 0.45 고정이고, 자리를 더 못 옮기면 거기서
멈춘다. 남는 몫은 관이 벽을 조금 벗어나는 것으로 두는 게 기존 확정 규칙이다.
검증: 두 측점 이동 16케이스 전부 두께 0.450 고정(두께 이상 0건), 계획고 스윕
24케이스 문제 0. tsc 통과, pytest 148 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
벽 밑을 관 축(유입 → 자연 사면 끝 직선) 위에 얹고 있었다. 성토측 지반이 관 물매보다
가파른 구간에서는 축이 지반 위로 떠올라 벽이 공중에 떴다 — 13+15.7 유출 벽은 자동
자리에서도 전면 0.14m, 바깥으로 2m 밀면 배면까지 0.16m 떴다.
관 끝은 원지반 위에 놓는다는 원칙대로 벽 밑을 **그 자리 원지반**(역경사는 유입 invert로
클램프)으로 바꿨다. 관 물매는 그 자리에 맞춰 다시 잡힌다. 유입 벽은 원래 지반을 따르고
있어 멀쩡했다 — 좌우가 달라 보인 이유가 이것이다.
표기 길이도 목표값이 아니라 **실제 그려진 관**의 올림값으로 바꿨다(자리 제약에 걸려
못 늘린 경우 도면보다 길게 적혔다).
검증: 이동 ±3m 전 구간 배면 근입 +0.500 고정(종전 −0.16~+0.59), 계획고 스윕
24케이스 문제 0. tsc 통과, pytest 148 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
지적 3건:
- 우측(유출) 기슭막이만 좌우로 밀 때 단면이 변했다. 0.1m씩 미니 관 길이 정수의
끝수를 벽 폭이 흡수해 0.45→0.90까지 뚱뚱해졌다. 조정 단위를 **관 길이 1m**로
바꾸고, 조정창으로 옮긴 벽은 폭을 절대 건드리지 않게 했다. 자리만 옮기면 정수
길이가 성립하므로 형상이 그대로다(검증: 두께 0.450 고정, L 1m씩 증감).
- 성토 사면이 역전되는 자리가 있었다. 벽 상단이 노견보다 높아지면 사면선이 위로
올라간다 — 최소 성토고 0.3m(FILL_MIN_RISE_M)를 두고 그 앞에서 멈춘다.
- 이동이 노견을 넘어 도로 반대편까지 갔다. 벽은 제 노견 바깥에만 서게 막았다.
조정창은 "관 길이 8m · 바깥 2.0m"처럼 관 길이를 같이 적는다.
700줄 유지를 위해 clampWallOffset·cutLength·outletSlopeFactory를 _Solve로 옮겼다.
검증: 이동 ±5m 20케이스 역전 0건·두께 고정, 275.71 유출 이동 11↔7m 정상,
계획고 스윕 24케이스 회귀 문제 0. tsc 통과, pytest 148 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
카드 하단 버튼 그룹을 걷어내고 **해당 횡단도 안**에 뜨는 조정창으로 바꿨다
(2026-08-21 사용자 확정). 앞으로 구조물 위치 조정은 모두 이 창을 통한다.
- _UI_Cross_Structure_Panel.ts 신설. 그래프 영역 좌측 하단에 절대 위치로 얹는다
(줌 버튼 우측 상단·면적표 중상단과 겹치지 않는 자리).
- 창 내용: 구조물 이름 · 자동 자리 대비 이동량 · ◀/▶/↺ · ✕(닫기 = 선택 해제).
- 이동량은 부호(+/−) 대신 "바깥 0.2m"처럼 적는다 — 좌·우 벽에서 부호만으로는
어느 쪽인지 읽히지 않는다.
검증(공용 브라우저 4+4.3): 유입 벽 클릭 → 창 열림(제목·자동 자리), ◀ 2회 →
"바깥 0.2m"·도형 이동, ↺ → 자동 자리 복귀, ✕ → 창 닫힘·강조 해제.
tsc 통과, pytest 148 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 강조 색을 --color-danger(붉은색)로 변경.
- 구조물을 고르면 그 측점 카드도 같이 선택된다. 이미 선택된 카드 안에서 다른
구조물을 고를 때는 강조만 옮겨 가고 카드 선택은 건드리지 않는다.
- 구조물 선택과 절·성토 면적 강조는 같은 레벨 — 하나를 고르면 다른 하나가 풀린다.
카드가 선택에서 빠져도 구조물 선택은 풀린다.
- 조정 버튼이 안 보이던 원인: .b06-cross-card__revetctl 스타일과 .is-hidden 규칙이
아예 없었다. 스타일을 넣고 "기슭막이" 라벨을 붙여 표시 반폭 그룹과 구분했다.
미선택 카드에서 구조물이 먹히지 않던 버그도 잡았다 — 면적 비우기(onAreaSelect)가
먼저 카드를 선택해 버려, 뒤이은 onSelect가 "같은 측점 재클릭 = 해제"로 상쇄됐다.
검증(공용 브라우저 4+4.3): 미선택 카드에서 구조물 클릭 → 벽 강조 + 화살표 + 카드
선택. 같은 카드 다른 구조물 → 강조만 이동. 면적칩 → 구조물 해제. 다시 구조물 →
면적 해제. tsc 통과, pytest 148 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
화면 확인에서 나온 두 가지:
- 그리기 순서가 벽 → 관 → 보호공이라 관 폴리곤이 벽 가운데를 덮어, 벽을 눌러도
관이 먼저 클릭을 먹었다. 그리기 순서는 그대로 두고 **투명 판정면**을 맨 마지막에
얹어 벽 전체가 눌리게 했다.
- 선택 강조가 존재하지 않는 --color-accent를 참조하고 있었다. 면적 밴드와 같은
규칙으로 --color-royal-amethyst를 쓰고, 규칙 위치도 기슭막이 기본 스타일 옆
(_Style_Cross_Areas.css)으로 옮겼다.
검증(공용 브라우저, 13+15.7 카드): 벽 클릭 → 강조·화살표 노출, ◀ 2회 이동 반영,
↺ 자동 자리 정확 복귀. tsc 통과, pytest 148 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 기슭막이 폴리곤을 눌러 고르면 강조되고 카드 하단에 ◀/▶/↺가 뜬다. 0.1m씩
화면 좌우로 민다(좌우 벽에서 뜻이 뒤집히지 않게 outward 부호는 내부 환산).
- 구조물 선택이 절·성토 면적 강조보다 우선한다. 벽 클릭은 벽에서 멈춰 밴드·카드
선택으로 번지지 않고, 한쪽을 고르면 다른 쪽 강조는 꺼진다.
- computeCulvertLayout에 revetShift 인자 추가. 손으로 민 자리는 고정되어 관 길이
정수 맞춤이 벽을 다시 옮기지 않고 폭으로만 흡수한다(폭 상한 0.45×2).
- 값은 세션 보관(b06:revetx), 이동 범위 ±3m.
- 700줄 정리: Page 751→690(_UI_Page_Station_Controls 분리),
Cross_View 765→629(_UI_Cross_View_Zoom 분리).
검증: 이동 5케이스 접점 오차 0.00e+00, 계획고 스윕 24케이스 회귀 문제 0,
tsc 통과, pytest 148 pass. 화면 조작 확인은 다음 단계.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 기슭막이 높이 = 관경 + 여유고 0.5m (0.1m 눈금 올림). 좌우 여유고 동일.
- 관 길이는 절단 긴 변 기준 정수 m. 벽 자리 이동으로 맞추고, 물매·5m 제약에
걸리면 벽 폭으로 흡수(폭은 5m 한계를 넘지 않는 범위까지만).
- 성토 물매를 1:1.2 고정에서 1:1.2~2.0 범위(성토_비탈면.md §1)로 전환.
벽 자리가 굳은 뒤 물매를 역산해 사면선이 벽 이음선 상단점을 지나게 한다.
종전에는 관 길이 맞춤이 벽을 옮겨 접점이 깨졌고 스냅으로 가리고 있었다.
- 성토 사면선은 단일 각도 직선 하나를 배수관 레이아웃이 직접 공급(설계선 대체).
- 벽 자리 탐색 상한 = 성토 사면 끝, 사면길이 5m 초과 전까지. 성토고 3m 이상이면
5m 쪽으로 끌어올린다.
- 기슭막이로 성토를 못 받는 자리는 structureRequired로 표시(옹벽·석축 검토).
- 700줄 제한으로 Const/Types/Solve 3개 파일 분리.
검증: 계획고 -2.0~+3.0 스윕 24케이스 문제 0 (접점 오차 <1e-6, 여유고 0.5,
5m 초과는 전부 경고). tsc 통과, pytest 148 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>