- 조정창 숫자가 실제와 갈렸다. 안쪽으로 계속 누르니 "안쪽 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>
- 기슭막이 폴리곤을 눌러 고르면 강조되고 카드 하단에 ◀/▶/↺가 뜬다. 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>