From a147cd62b21954ca470c9eaaa555c12a346369b6 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 24 Oct 2026 09:49:41 +0900 Subject: [PATCH] =?UTF-8?q?chore(=EA=B3=84=ED=9A=8D):=20=EC=9A=94=EA=B5=AC?= =?UTF-8?q?=20336=20=E2=80=94=20PLAN=20=EB=81=9D=EB=82=9C=20=EC=A0=88=2013?= =?UTF-8?q?8=20=ED=86=B5=EC=A7=B8=20=C2=B7=20=EC=84=9E=EC=9D=B8=20?= =?UTF-8?q?=EC=A0=88=2013=20=EB=81=9D=EB=82=9C=20=EC=A4=84=20=EC=9D=B4?= =?UTF-8?q?=EA=B4=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 472-2 · 4 · 5 · 6 = 아래 줄 모두 끝 · 체크 - 477-3 = 사용자 확정(docs 는 raw 만 · 문서 사이트 · 위키 안 씀) · 체크 - PLAN.md(git 밖) 1525 → 145 줄 · 남은 미체크 19 그대로 · CODEX 절 안 만짐 Co-Authored-By: Claude Opus 5.5 --- docs/raw/plans/2026-10-24_plan_335-518.md | 1558 +++++++++++++++++++++ 1 file changed, 1558 insertions(+) create mode 100644 docs/raw/plans/2026-10-24_plan_335-518.md diff --git a/docs/raw/plans/2026-10-24_plan_335-518.md b/docs/raw/plans/2026-10-24_plan_335-518.md new file mode 100644 index 000000000..db769b7b8 --- /dev/null +++ b/docs/raw/plans/2026-10-24_plan_335-518.md @@ -0,0 +1,1558 @@ +# 계획서 완료 이관 (10-24 · 요구 336) + +절 이름만 = 끝난 절 통째 · 「(일부)」 = 끝난 줄만 · 남은 줄은 PLAN.md. + +## 335. CAD 입력 보강 — 상세 검토 (요구 225-3 · 브레인 · 코드 X) — (일부 · 남은 줄은 PLAN.md) + +- [x] 335-1 검토 — 오토캐드 71 가지 대 우리(있음 2 · 일부 28 · 없음 41) · 흠 12(급한 셋 = Ctrl 조합이 명령 글자로 쌓임 · 보기 전용이 그립 · Delete · 특성으로 고쳐짐 · 그립 누름만으로 점 밀림) · 묶음 일곱 · 정할 것 14 — 근거 docs/raw/조사/2026-10-15_335_CAD입력보강_검토.md(부록1 오토캐드 · 부록2 우리 현황). +- [x] 335-3 재조사 — 새 입력 방법 53 줄(쓸모 상 20 · 우리 없음 38) · 새 흠 H13 치수 글 = 종이 길이 · H14 B07 횡단 좌우 = B06 거울(둘 다 코드 확인) · 묶음 ⑧ 실제 값 입력 · ⑨ 기기 무관 입력 · ⑩ 임도 표기 도구 · 새 차례 · 정할 것 15~23 — `docs/raw/조사/2026-10-15_335_재조사_CAD입력.md` · 부록3 원문. +- [x] 335-4 다시 조사(335-3 범위 어긋남) — 오토캐드 마우스 · 키보드 조작 146(명령 31) 대 우리 있음 26 · 일부 69 · 없음 51(보강 쓸모 상 40) · 흠 30(H1~H12 남음 + N1~N18 · 급한 일곱) · 묶음 일곱(⓪ 흠 → ② 명령 중 키 → ⑤ 명령 옵션 → ① 숫자 → ③ 마우스 → ④ 단축키 → ⑥ 켬끔 · 어림 28 일) · 정할 것 24 — `docs/raw/조사/2026-10-15_335_다시조사_오토캐드마우스키보드.md` · 부록4. + +## 336. M02 외부 일위대가 — 이름 맞춤 개선 상세 검토 (요구 225-4 · 브레인 · 코드 X) — (일부 · 남은 줄은 PLAN.md) + +- [x] 336-1 검토 — 실측 세 파일 126 줄: 1순위 41% → 지금 71% · 다섯 안 60% → 87% · 이름 다듬기 · 손 사전은 효과 0 또는 해로움 · 묶음 넷(① 근거 쪽 서버 고침 = 1순위 86% · 다섯 안 94% ② 고르기 창 손질 ③ 회사별 맞춤 기억 넓히기 ④ STmate 꼴 읽기 = 실무 내역 9 중 6 이 올리기부터 막힘) · 정할 것 11 — 근거 docs/raw/조사/2026-10-15_336_외부일위대가_이름맞춤_검토.md(부록1 실측 · 부록2 바깥 방법). +- [x] 336-3 재검토 — 원본 로직 안 고침 · 맞춤 쪽 묶음 쌓기로 1순위 71.4 → 92.9% · 다섯 안 86.5 → 96.8% · 호표 조합 맞음 9.6 → 75.9% · 편의대로 바꾼 꼴 확인(이름 116 · 묶음 40 · 품 바꿈 32 / 126) · 묶음 ① 근거 고침 ② 로직 지문 ③ 조합 풀이 ④ 조건부 기억 ⑤ 읽기 넓힘 ⑥ 고르기 창 · 정할 것 풀림 4 · 새 4 — `docs/raw/조사/2026-10-15_336_재검토_로직조합맞춤.md` · 부록3 원문. +- [x] 336-4 목적 다시 고민 — 목적 = 실무 엑셀 일위대가를 우리 사전조합(로직 + 옵션 + 수량)으로 옮김 · 고른 짝은 별칭 장부 · 확인한 줄만 들어감 · 228 확인(옵션만으로 엑셀 품 그대로 58% · 덧셈 20% · 원문 대조 14 = 우리가 원문과 같음) · 묶음 A 확인 규칙 + 확인 창 → B 인용 조항 맞대기 → C 별칭 장부 → D 지문 + 옵션 찾기 → E 한 줄 여러 로직 → F STmate · 거창 · 기본안 다섯 — `docs/raw/조사/2026-10-15_336_목적다시_외부일위대가.md` · 부록4. + +## 365. 평면 > 종단 <> 횡단 한 방향 · 캐시 · 고리 (요구 240-4 · 8 · sub7 · Opus high) + + +- 정함(브레인): 계산 길 하나 = 평면(노선) → 종단 → 횡단 · 종단 ↔ 횡단은 지금처럼 서로 실시간 · 횡단은 평면을 안 움직임(예외 356-3 중심점 ◀▶ = 평면 입력 · 같은 입구 한 바퀴) · 묶음 주인 = 페이지(B05 · B06 어느 쪽으로 들어와도 · 새로고침도 초안 기준) · B05 오른쪽 횡단 판 = 묶음 횡단 · 고리 = 입력 지문 대 파생 지문 · 다르면 한 바퀴 · 최대 3 · 넘으면 알림 · 끄는 동안 선만 · 놓을 때 한 바퀴 · 근거 `docs/raw/조사/2026-10-17_365_요구240_분석.md` 1장. +- [x] 365-1 묶음을 페이지가 세움(B06 바로 열기 · 새로고침 = 초안 셈) · 초안 동안 저장 노선 횡단 캐시 안 덮음 — 확인: B06 바로 열기 + 노선 초안 → B06 카드 = 초안 측점 · 계획고 시험 · 새로고침 뒤 같음. +- [x] 365-2 횡단 고침 → 묶음 cross 입력(초안 동안 B06 고침 보임) · 들어올 때 · 바뀐 뒤 지문 고리 — 확인: 바퀴 수 시험(같은 입력 = 0 바퀴 · 넘으면 알림). +- [x] 365-3 B05 오른쪽 횡단 판 = 묶음 횡단(서버 cross-preview 지움 · 노선 · 계획고 바뀔 때마다) — 확인: 판 계획고 = B06 카드 계획고. +- [x] 365-4 한 바퀴 정리 — 계획고 한 번 = 횡단 계산 한 벌 · B06 다시 그림 한 틀 한 번 · 중심점 좌우 = 묶음 한 바퀴 — 확인: 바퀴 · 그림 횟수 · 끌기 · ▲▼ 시간 전후. + — 검증완료 — test_365 12 · 관련 555 통과 · typecheck 0 · ORCA 검증_sub7 · 끌기 놓음 1바퀴 124~156 ms · 저장 ▲ 1바퀴 125 ms(cross 5.4) · 초안 ▲ 94 ms · B06 고침 1바퀴 116 ms · 들어올 때 0바퀴 · B06 새로고침 = 측점 · 계획고 같음(세월교 곁 면적은 먼저 연 보기 따라 다름 · 남음) · 판 20+0 = 카드 · 세션 상세 = 저장 노선. +- [x] 365-5 들어온 화면 무관 같은 면적 · 초안 소단 고침 — 확인: B05 먼저 · B06 먼저 · 새로고침 면적 같음. + — 검증완료 — test_365 14 · 관련 574 통과(남 3 = 323-9 · 369-2 · 367-3 몫) · typecheck 0 · ORCA 검증_sub7 B05 끌기 · B06 먼저 · B05 먼저 새로고침 = 67 측점 계획고 · 절토 · 성토 같음(±0.01) · 열 때 1바퀴 414~451 ms · 초안 소단 = 구조물 구간 · 쪽 깊이 고침 1바퀴(Node 시험) · 세션 비우고 탭 닫음. + +## 366. B05 평면 — 등고선 자물쇠 · 도구줄 · R 일반측점 (요구 240-1 · 3 · 11 · sub1 · Opus high) + + +- 정함(브레인): 자물쇠 = 가닥을 고른 때만 클릭 자리 옆(잠긴 높이 가닥을 다시 고르면 풀기 자물쇠 · 다음 클릭 · 휠 · 떠남에 숨김) · 도구줄 = [?] | ↶ ↷ | 3D | ⟲ ⟳ · 1m 등고선 · 절/성토선 · 거리 재기 | 측점 스냅(분석 지형은 있을 때 맨 오른쪽) · [맞춤] 지움(처음 열 때 맞춤은 그대로) · 측점 스냅 켬 = 곡선 가운데(MC)를 가까운 일반측점에(놓을 때 · 고친 IP 부터 끝까지 IP 를 들어오는 접선 따라 ±간격/2 · 고정 IP 안 움직임 · 못 놓는 곡선은 그대로 + 상태줄 「측점 밖 곡선 N개」) · 끔 = 자유 · 추천 [적용] 땐 안 맞춤 · 근거 2장. +- [x] 366-1 등고선 자물쇠 고른 때만 — 확인: test_353_2 고쳐 씀 · 지나기만 = 안 뜸. + - 검증완료 — 지나기 안 뜸 · 고른 가닥 클릭 옆 · 잠금 뒤 빈 곳 · 다른 높이 = 숨김 · 고름 유지 · 같은 높이 = 풀기 · 휠 · 떠남 0.7 s 숨김. +- [x] 366-2 평면 도구줄 순서 · 구분선 · [맞춤] 지움 · [?] 도구줄로 — 확인: 순서 · 구분선 4 시험 + 화면. + - 검증완료 — 화면 차례 그대로 · [?] 펼침 · 회전 동작 · 밝음/어두움. +- [x] 366-3 측점 스냅 = R 일반측점(새 logic 파일 · 상태줄) — 확인: MC % 간격 ≈ 0 · 고정 IP 그대로 · 곡선 수 ≤ 측점 수 Node 시험 + 화면 IP 끌기. + - 검증완료 — 켬 = 측점 밖 곡선 26 → 3(앞 30 m 에 몰린 셋) · 맞춘 23곡선 MC 잔차 ≤ 0.009 m · 시종점 그대로 · IP 밂 ≤ 8.8 m · IP 끌기 = 앞 IP 그대로 · 끔 = 끈 IP 하나만 · 되돌려 원래 1078.0 m. + +## 367. 종단 판 — 유토곡선 · 창 분할 · 자유지정 되돌리기 · 녹색 (요구 240-2 · 23 · 18 · 19 · sub2 · Opus high) + + +- 정함(브레인): 유토곡선 = 늘 전체 맞춤 보기(측점 연계 보기 · 스크롤 동기 · 측점선 지움) · 기본 = 횡단 기준 + 토량 분배 켬(저장 범례 판 올려 새 기본) · [토량 분배] = 분배 그림(평형선 · 띠 · 장비 도형) 보임/숨김 · [도형 위치 초기화] = [횡단 기준] 왼쪽 · [창 분할] = 펼친 때만(접으면 손잡이만) · 자유지정 동안 ↶ ↷ · Ctrl+Z · Ctrl+Shift+Z = 자유지정 안에서만(범위 · 시작 · 점 한 걸음씩 · 끝 = 큰 이력 한 걸음 · 막히면 열린 채) · 자유지정 선 · 점 · 미리보기 = 녹색(--color-success) · 범위 띠 보라 · 기울기 넘음 빨강 그대로 · 근거 3장. +- [x] 367-1 유토곡선 보기 · 기본값 · 버튼 자리 — 확인: test_354_1 · 354_3 고쳐 씀 + 화면. +- [x] 367-2 [창 분할] 펼친 때만 — 확인: 접음 = 단추 없음 · 높이 0 시험. +- [x] 367-3 자유지정 되돌리기 · 다시하기 — 확인: helper_215_1 ⑥(점 둘 → ↶ → ↷ → 새 클릭이 ↷ 지움 · 큰 이력 안 건드림). +- [x] 367-4 자유지정 녹색 — 확인: 밝음 · 어두움 색 시험. +- [x] 367-5 종단 판 접은 뒤 횡단 카드 누름 — 확인: 접은 뒤 카드 자리 elementFromPoint = 카드 + - 검증완료 — 까닭 = 종단 판 높이 transition(07-28 · 294151f862 부터 · 367-2 무관)이 그려지지 않는 탭에서 시작을 못 해 접어도 820px 그대로 → column 이 누름 받음 · transition 지움 · 시험 옛 CSS 실패 · 새 CSS 통과 · 화면(검증_sub2 · 5177) 펼침 820 · 접음 1 즉시 · 카드 네 자리 = 카드 · 진짜 누름 카드 고름 · 유토 판 열린 채 · 어두움 · B05 평면 같음. +- [x] 367-6 유토 손잡이 · 범례 안 겹침 — 확인: 범례 단추 셋 elementFromPoint = 단추 + - 검증완료 — 범례 자리 = 손잡이 오른쪽부터 · 좁으면 줄 바꿈 · 시험(360 · 434 · 700 · 1162px) 단추 셋 + 손잡이 = 자기 · 1162 한 줄 · 옛 CSS 360 에서 [횡단 기준] 실패 · 화면(검증_sub2 · 5177) B06 · B05 좁은 칸 434 = 셋 줄 · 넓은 칸 1162 = 지금 한 줄 · 진짜 누름 [토량 분배] 끔 · 켬 · [횡단 기준] 누름 닿음 · 어두움 같음. +- 검증완료(367): 시험 · typecheck 통과 · 화면(검증_sub2 · 5177) 유토 폭 1162 = 칸 폭 · 측점선 0 · 범례 [도형 위치 초기화][횡단 기준][토량 분배] 기본 켬 · 접음 높이 0 · [창 분할] 숨김 · 자유지정 ↶↷ · Ctrl+Z · Ctrl+Shift+Z · Backspace · 새 클릭 ↷ 지움 · 비어도 큰 이력 안 감 · Enter = 큰 이력 한 걸음 · 선 · 점 밝음 #1f8a4c · 어두움 #3fbb6f · 띠 보라 · 넘음 빨강. + +## 368. 종단 R 넣기 · 원지반 점 횡단 · 추가 측점 (요구 240-20 · 21 · sub6 · Opus high) + + +- 정함(브레인): 직선 안 측점 ▲▼ = 그 점에 R(기본 L) · 좌우 다음 R 점(없으면 시점 · 종점)이 축 · 사이 점 새 직선 위(355 「직선 안쪽 = 그대로」 뒤집음 · 꼭짓점 아닌 자리도 같은 규칙) · 원지반선 아무 점 클릭(도구 꺼진 때 · 정수 m) → 종단 칸 안 작은 창 = 그 자리 임시 횡단(지금 계획선 · 브라우저 같은 계산 · 격자 없으면 서버 미리보기) + [측점 추가] · [삭제] · [닫기] · 추가 측점 = 일반측점(카드 이름 빈칸 · 이름 「12+7」) · 종단 세로선 = 일반측점 색 점선 · B06 횡단 목록에 섬 · 노선 바뀌면 관 · 구조물처럼 좌표로 따라감 · 같은 m 이면 막음 · 끌기 없음 · 삭제 = 작은 창 + 우클릭 · [저장] 한 번 · 근거 4장. +- [x] 368-1 ▲▼ 직선 안 = 그 점 R · 이웃 R 축(Pivot) — 확인: helper_355_1 ③ 바꿈 · ④ 더함. + - 검증완료 — test_355_1 5 통과(직선 안 80 · 꼭짓점 아닌 70: +0.1 · 축 40 · 100 그대로 · 사이 점 새 직선 위 오차 < 1e-6) · 193_1 · 234_1 · 344_2 · 349_0v 통과. +- [x] 368-2 추가 측점 자료 · 심기(측점 한 벌 짝 TS ↔ 서버) · [저장] · 좌표 따라감 — 확인: 거울 시험 test_272_1 · 322_3 · 344_3 에 추가 측점 경우. + - 검증완료 — 거울 272_1 · 322_3 · 344_3(추가 측점 경우 · 같은 m 관 이김) · test_368_2(정수 m · 좌표 · 노선 +10 m 따라감) · 저장 차례 · 묶음 넷 다시 지음 통과 · 322_0_golden 1 실패 = 표 고르기 목록(borrow_pit) — 이 일과 무관. +- [x] 368-3 원지반 점 작은 창 · 임시 횡단 · [측점 추가] · 점선 · 우클릭 삭제 — 확인: 시험 + 화면(추가 → B06 카드 → 삭제 → 되돌리기). + - 검증완료 — 검증_sub6 화면: 원지반 27 m 누름 = 작은 창 「1+7」 · [측점 추가] = 점선(일반측점 색 rgb 184,134,11 · 5 3) · ▲ = 27 키 하나 · B06 카드 1+7 이름 빈칸 · [저장] 뒤 새 탭 그대로 · 우클릭 「측점 삭제」 · 되돌리기 · 다시하기 · 2+0 자리 [측점 추가] 막힘 · 어두움 · 작은 창 그림 = 저장 계획선 기준(지금 계획선 브라우저 셈은 안 함) · 값 되돌림(추가 측점 · 27 계획고 · 옮겨진 기타 구조물 지움 · 관 초안 정수 m 맞춤은 저장됨). +- [x] 368-4 작은 창 = 지금 계획선 — 확인: ▲ 뒤 창 계획고 = 카드 계획고 + - 검증완료 — test_368_4(측점 틀 · 반경 · 확폭 = 추가 측점 묶음 측점) · 322_0 golden 다시 뜸 통과 · 검증_sub6 화면: 27 m 창 계획고 869.728(= 묶음) → 1+0 ▲(저장 안 함) 뒤 869.968 바로 바뀜 · [측점 추가] 뒤 B06 카드 869.9677(차 < 0.001 · 사면 11.72 · 절토 2.76 · 성토 13.07 같음) · 저장 안 함(서버 그대로). +- [x] 368-5 test_323_9_save_redraw 깨짐 = 가짜 저장 단계에 plusStations 빠짐(진짜 GET → 오류 알림) — 확인: helper 에 가짜 단계 · 코드 안 고침. + - 검증완료 — test_323_9 세 파일 · test_368_2 · test_design_store_save 22 통과(기대 차례 그대로). + +## 369. 배수 구조물 자리 — 기본 = 세류선 교차만 · [자동 제안] 두 방식 (요구 240-7 · sub5 · Opus high) + + +- 정함(브레인): 자동설계 · 노선 [저장] · 추천 [적용] · 스냅샷 없는 [초기화] · [배관 배치 초기화] = 세류선 교차 자리만(100 m 보충 · 오목 보충 끔) · 배수유역 머리 [자동 제안] → ① 전체 자동(세류선 + 100 m 규칙으로 다시 · 같은 자리 관 속성 · id 유지) ② 지정 포함 추가(지금 관 그대로 + 빈 구간 보충) · 결과 = 초안(캐시) · [저장] 때 정본 · 되돌리기 한 걸음 · 제안 목록 [적용] = 관경 · 시설만(관 자리는 [자동 제안]) · 새 관 = 등록부 기본값 · 간격 100 m(env) · 이미 저장된 관 · 초기값 그대로 · 근거 7장(지식DB 배수시설_배치.md:55,60 교차점 필수 · 간격 보충). +- [x] 369-1 서버 auto 칸(없음 = 세류선만 · all · add) · 노선 저장 오목 보충 끔 · 새 관 기본값 — 확인: 세 모드 시험 · test_346_3 고쳐 씀. + - 검증완료 — test_369_drainage_auto 6 · test_346_3 두 벌 25 · 배수유역 시험 12 벌 81 통과 · typecheck 통과. +- [x] 369-2 배수유역 [자동 제안] 두 방식 · 제안 [적용] = 관경 · 시설만 — 확인: 화면(① · ② · 되돌리기 · [저장] 뒤 정본). + - 검증완료 — 검증_sub5 화면: 초기화 관 1 → ② 관 11(새 관 Ø1000) · ① 관 11(세월교 352 m · 같은 자리 관경 유지) · 되돌리기 · 다시하기 한 걸음씩(세월교 되살아남) · [적용] = 시설만 · 어두운 화면 · 시험 349 · 347 · 369 통과. +- [x] 369-3 [업데이트] 진짜 누름 — 확인: 관 표지 위 단추 누름 = 계산 시작 + - 검증완료 — 검증_sub5 화면: 관 표지 7 을 [업데이트] 한가운데 아래로 옮기고 진짜 누름 → pointerdown · pointerup · click 모두 옴 · drainage/live 1회 · 세부유역 11 · [자동 제안] 켜짐 · test_369_3 2(옛 코드 = 실패 재현) · 347_2 · 349 흐름 15 통과 · typecheck 통과. +- [x] 369-4 배수유역 판 홀로 서기 — 369-2 가 `B05_Profile_UI_Drainage_Live.ts` 에서 종단 `_Profile_History` 를 직접 가져옴(test_b05_drainage_side 실패) → `_Panel_Types` 약속(콜백 · 창구)으로. 확인: test_b05_drainage_side 통과 · 되돌리기 화면 그대로. + - 검증완료: test_b05_drainage_side 4 · test_369_drainage_auto · test_346_4 · test_349 · 판 · SideTool 시험 160 통과 · typecheck 0 · Panel `pageReplaying` 도 약속(isReplaying)으로 · 화면 = 브레인 마무리(검증 대기). + +## 370. B06 사면 이동 · 멈춤 · 선 고름 공용 칸 (요구 240-13 · 14 · 22 · sub4 · Opus high) + + +- 정함(브레인): 사면 이동 = 옮긴 노견에서 절/성 판정(짝 두 벌) → 넘어가면 그 쪽 사면 기울기로 원지반까지 · 측구 = 자동 판정 따름(사용자가 켠 측구 유지) · ◀▶ 가 절도 성도 아닌 점(노견 끝 = 원지반)을 지나면 그 점에 한 번 섬 · 쪽마다 설계선 ∩ 원지반 교차점 손잡이(늘 보임 · 고르면 ◀▶) · 절 ↔ 성 넘어가도 고름 유지 · 암 경계선 = 고름 · 방향키 ▲▼ · 세로 끌기(놓을 때 한 번) · 아래 띠 왼쪽 칸 = 공용 칸(안 고르면 암 ▲▼ · 고르면 그 선 제목 · 버튼 · 값 한 줄) · 우측 위 라벨 · 떠 있는 선 조정창 걷음(구조물 조정창 그대로) · 근거 5 · 6장. +- [x] 370-1 절 ↔ 성 넘어감 판정 차례(TS ↔ 파이썬 짝) — 확인: 거울 사례 「마루 너머 = 성토 1:n」. +- [x] 370-2 멈춤 · 교차점 손잡이 · 고름 이어받기 — 확인: Node 시험 + 화면. +- [x] 370-3 암 경계선 고름 · 키 · 끌기 · 공용 칸 — 확인: test_137 · 179_1 · 318 고쳐 씀 + 화면(밝음 · 어두움). + - 검증완료 — 시험 98 · typecheck 통과 · 검증_sub4 화면: 34+0(계획고 +1.0 임시) ◀▶ 1.3 → 1.356 멈춤 → 양측 성토 · 우 성토 1:n · 교차점 고름 유지 · 암 ▲▼ −0.5 → −0.3(계획고 그대로) · 끌기 −2.1 한 번 · 어두움 · 바꾼 값은 탭 캐시째 버림(저장 안 함) · 검증 대기. +- [x] 370-4 멈춤 자리에서 못 넘어감 — 브레인 화면: 검증_브레인232 54+0 좌 ◀ = 0.9 → 0.936 멈춤 뒤 ◀ 계속 눌러도 0.936(넘어가지 않음). 까닭: `extendStop` 멈춤값 0.001 m 반올림이 교차 앞에 떨어지면 남은 틈 > 1e-4 → 다음 걸음이 같은 교차를 다시 찾아 now 그대로. 고침: 멈춤 자리 판정을 379-1 「절·성토 없음」(±5 mm)과 같게 — 지금 자리가 그 안이면 next 그대로. 확인: helper_370_2 에 「반올림이 교차 앞」 사례(54+0 같은 꼴 · 0.936 다음 걸음 = 1.036) + 화면. +- 검증완료(370-4) — 잣대 상수 ON_GROUND_M 하나(extendStop · edgeOnGround) · helper 2.736 → 2.836(옛 잣대면 ≈ 2.737) · test_370_2 · 370_3 · 318 · 173 36 통과 · typecheck · 화면은 브레인 합친 뒤(검증_sub4 교차 측점 없음) · 검증 대기. +- [x] 370-5 넘어간 사면이 원지반과 못 만나면 고름이 풀림 — 브레인 화면: 검증_브레인232 54+0 좌 ◀ 0.94 멈춤 → 1.00 넘어감(370-4 통과) · 성토 사면 「사면 미교차」(20 m 안 못 만남 · 교차점 손잡이 없음) → 고름 풀려 공용 칸이 「암 경계」로 바뀜 · 같은 자리 단추를 계속 누르면 암 경계가 움직임(브레인이 실제로 −0.5 → −0.8 움직임 · ↺ 되돌림). 고침: 교차점 손잡이가 없으면 같은 쪽 사면 선(성토 키)으로 고름 이어받기 · 그것도 없으면 고름 유지한 채 ◀▶ 남김(암 경계로 넘기지 않음). 확인: 시험(손잡이 없는 넘어감) + 화면. +- 검증완료(370-5) — pickedLineAt 이어받기 = 같은 키 → 같은 쪽 손잡이 → 같은 쪽 첫 절·성토 사면 선(손잡이 키 고름도) · 시험 370_2 등 154 통과 · typecheck · ORCA 5179 검증_sub4 0+0 좌 손잡이 고름 ◀ +7.5 m = 「⚠ 사면 미교차」 · 손잡이 사라짐 → 공용 칸 「사면 이동 (좌)」 ◀↺▶ 유지(암 경계 아님) · ◀ 한 번 더 +7.6 · ↺ = 2.30 m 손잡이 고름 되돌아옴 · 캐시 지움 · 「둘 다 없음 = 고름만 유지」 갈래는 안 만듦(넘어간 성토 사면은 설계선 끝까지 그려져 늘 있음) · 검증 대기. + +## 371. B06 벽 성토 이음 · 관 기울기 글 · 맹암거 하단 (요구 240-15 · 16 · 24 · sub8 · Opus high) + + +- 정함(브레인): 같은 벽 형상(관보호공 · 흙막이 · 옹벽 · BOX · 세월교 흙막이 · 다단 · 돌쌓기) 성토 위 이음 = 윗면 사면 쪽 끝에서 0.1 m · 바닥 추가 성토 시작 = 전면 경사 ∩ 하단 수평선(벽 발끝) · 기본 벽 자리 = 새 이음 기준(노폭 연장 0 유지) · 세월교 · 박스 수평공간 그대로 · 관 글 = 「… L=8 m (7.6), S=2.5%」(소수 한 자리 · 툴팁 매설 경사 지움 · B07 도면 안 넣음) · 맹암거 = 노면 표준(낮은 쪽 한 경사 · 측구 없음) · 암거 경사 = 맹암거 영역 하단 경계(높은 쪽 노면 끝 − 높이에서 경사로) · 3D · B07 같은 함수 따라감 · 근거 5 · 6장. +- [x] 371-1 벽 성토 이음 0.1 m · 바닥 시작 · 기본 자리 — 확인: test_b06_wall_shape_unified · helper_79/80/186_1 + 서버 묶음 다시 지음. + - 정함(브레인 답): 다단 사이 시작 = 늘 윗단 발끝(원지반 무관) · 마지막 벽 → 끝 구간 · 관 유출 벽 = 발끝이 지반 위에 뜬 벽만 발끝 · 선 · 묻힌 벽은 옛 시작(기준선 ∩ 전면). + - 검증완료 — 벽 · 관 · 다단 시험 137 통과(test_322_0_golden 1 실패는 고치기 전 코드도 같음 · 371 무관) · 관 길이 7.9 → 7.5 · 5.8 → 5.4 m · 화면(검증_sub8 4+5) 윗면 끝 ↔ 성토 이음 0.100 m · 윗면 폭 0.675 m. +- [x] 371-2 관 글 S= — 확인: 글 시험(세월교 · 박스 없음). + - 검증완료 — test_371_2_pipe_slope_text 4 통과(「…, L=8 m (7.5), S=0.9%」 · 역경사 S=0.0% · 관 숨김 글 없음) · test_225_1 통과 · 화면 4+5 「L=8 m (7.9), S=0.9%」 · 툴팁 매설 경사 없음 · 세월교 글 S 없음 · 어두움 읽힘. +- [x] 371-3 맹암거 노면 표준 · 하단 = 암거 경사 — 확인: test_288 · 349_0n 고쳐 씀 + B07 묶음. + - 검증완료 — test_288 · 349_0n · 314 · 286_1 27 통과(노면 5 % · 암거 3 % · 높이 1 m 하단 = 99.15 에서 3 % · 성토 교점 −4.39 m) · 묶음 셋 다시 지음 · test_52_6 1 실패는 M02 기본 3 % 탓(371 무관) · 화면 2+0 맹암거(저장 안 함 · 지움) 노면 3 % · 암거 8 % 하단 8.01 % · 높은 쪽 깊이 1.000 m · 경사 비면 하단 3.0 %(노면 평행). +- [x] 371-4 흠 아님(가린 B군 옛 종류 · 사람은 못 고름 — underdrain = 표 형상 none · 목록 hidden(223-2) · 드롭다운 option.hidden · 스크립트 select --value 가 고른 길 · 그리는 맹암거 = A군 cross_underdrain) · B06 폼으로 넣은 맹암거가 카드에 안 나옴 — 브레인 화면: 검증_브레인232 B06 구조물 배치 B · 맹암거 · 시작 6+0 · 종료 7+0 [추가] = 목록 「6+0~7+0 맹암거」 · 초안 type_id underdrain · options {} · 6+0 · 7+0 카드 · 상세 맹암거 그림 0 · 측구 그대로(새로고침 뒤도). 371-3 화면(2+0 · 저장 안 함)은 나왔음 — 길 차이 가림(높이 · 경사 빈 값 · 폼 길 · 다시 그림 차례) · 흠이면 고침. 확인: 화면(폼 길 · 높이 · 경사 빈 값/있음). + +## 372. 이름 · M02 실무자료 · CAD 글 (요구 240-10 · 5 · 6 · 9 · sub3 · Sonnet high) + + +- 정함(브레인): 페이지 이름 「종단설계」 → 「노선설계」(좌측 패널 제목 · ☰ 단계 · 진행 표시 · 안내 · 메일 · 도움말 제목 · 영문 Route Design) · 하단 「종단 보기」 → 「노선 보기」(Route view) · 종단 그래프 · 종단면 · 단축키 「B05 종단」은 그대로 · M02 실무자료 [저장] 사전조합 = 로그인한 사람 개인 층(화면 층 무관 · [삭제]는 화면 층 쓰기 권한 때만) · 회사 · 마스터는 가져오기 길 · 그 복사에서 실무자료 표시 · 전국자재 지킴 · 단가산출 지정 영역 = B~F 열 · CAD 글 = 조합 없으면 종류 이름만(측점 맨 위 한 번 · 같은 측점 같은 종류 한 줄 · 저장된 칸 그대로) · 근거 2 · 6 · 8장. +- [x] 372-1 이름 바꿈 — 확인: 글 시험 짝(design_view_parity) + 화면. 검증완료 — 시험 통과 · 화면(B05 「노선설계」 · B06 「노선 보기」 · 진행 표시 「노선설계」). +- [x] 372-2 M02 개인 전용 · B~F · 복사 때 본뜬 지킴 — 확인: test_m02_hopyo_screen · seam 고쳐 씀 · 다른 층 화면에서 [저장] = 개인 층에 생김. 검증완료 — 시험 통과 · 화면은 개인 층 엑셀 보기 창만(회사 · 마스터 층에 실무자료 파일 없음 · 올리기 금지라 다른 층 [저장]은 시험으로만). +- [x] 372-3 CAD 글 종류 이름 — 확인: test_265 · 166_1 짝(TS ↔ 파이썬). 검증완료 — 시험 통과 · 8+13 세월교 상세 CAD 글 = 「세월교」. + +## 373. B08 거리이정표 — 연결 없이 주소 · 경로 저장 · 녹색 점 (요구 240-12 · sub3 다음 · Sonnet high) + + +- 정함(브레인): 경로 탭 지도 = 연결 없어도 소재지 넣기(지도 누름 · [소재지] = 등록 창 재사용) · 연결 = 거리 · 경로 좌표(소수 5자리 · 점 줄임) 캐시 → [저장] 때 정본 · 다시 이으면 옛 거리 · 선 지우고 새 값(실패 = 빈칸 + 까닭) · 안 이은 기준점에 이으면 「시점 미연결」 · 녹색 연결 점 크게(r 6 → 9 · 진하게) · 근거 8장. +- [x] 373-1 주소 · 경로 저장 · 다시 이음 표시 — 확인: 시험 + 화면(운반 자동 상자 주소 넣기). 검증완료 — 시험 통과(test_373 · 244_9 · 244_13) · 화면: 운반 자동 상자 지도 누름 = 주소 · 연결 = 4.9 km + 선 118점 저장 · 새로 고침 뒤 선 그대로(길찾기 0회) · 실패 = 빈칸 + 까닭 · 다시 이음 = 옛 거리 · 선 지움 · 시점 미연결 안내. +- [x] 373-2 녹색 점 크기 — 확인: test_254_2 고쳐 씀. 검증완료 — 시험 통과 · 화면 밝음 · 어두움. + +## 374. 돋보기 — 지금 보이는 화면 그대로 (요구 240-17 · sub2 다음 · Opus high) + + +- 정함(브레인): 복제 원본 = 화면 전체(body · 모달 포함) · 움직이는 동안 다시 뜨지 않음(멈춘 뒤 한 번) · 이동 = 합성층 · 모달 입력칸에선 Z 키 안 켬(우클릭 길게 누르기 그대로) · WebGL · CAD 칸은 빈칸(한계) · 근거 8장. +- [x] 374-1 돋보기 원본 · 끊김 — 확인: helper_218_1 고쳐 씀 + 화면(모달 · 빠른 움직임). +- 검증완료(374): 시험 63 통과 · 화면 설명서 모달 안 확대 · 원 = html 아래(자기 복제 0) · 뜨기 66 ms 한 번 · 빠른 움직임 40걸음 최대 틀 25 ms · 50 ms 넘음 0 · 움직이는 동안 다시 뜸 0 · WebGL · CAD 칸 빈칸 = 한계. + +## 375. 요구 240 마무리 — 합치기 · 브레인 화면 검증 · 아티팩트 (브레인) + + +- 정함(브레인): 요구 241 과 함께 끝에 한 번 — 검증 · 아티팩트 하나(385). +- [x] 375-1 합치기 · 서버 묶음 · 고친 대상 시험 · typecheck — 확인: 묶음 다시 지음 · 시험 통과. +- [x] 375-2 브레인 사용자처럼 브라우저 검증(요구 1~24 · 수치 · 사진) — 흠은 창에 고침 → 다시 잼. +- [x] 375-3 아티팩트 보고(요구별 결과 · 수치 · 사진 · 정함 목록 · 남은 것). +- 검증완료(375 · 385와 함께) — 아래 385 줄. + +## 376. B07 구조물 도면 컨테이너 (요구 241-1 · sub3 · Opus high) + + +- 정함(브레인): 좌측 패널 「구조물 도면」 카드(늘 카드) = B05 · B06 배치에 연결된 구조물 조합 도면을 조합 키로 중복 없이 한 장씩 단추(더한장은 장마다) · 열면 CAD 에 프로젝트 사본 도면 + 도각(도번 · 도면명) · 확정 가능 · 고치기는 M02/B08 · 09-13 「구조물도 B08 이관」 결정은 이 요구로 B07 에 다시 들임(B08 모달 그대로) · 근거 `docs/raw/조사/2026-10-17_376_요구241_분석.md` 1장. +- [x] 376-1 서버 목록 · 단건(linked_snapshots · structure_frame · _drawing_list 맨 뒤 · _read_drawing 분기 · 확정본 kind) — 확인: 시험(조합 둘 · 같은 조합 두 배치 = 단추 하나 · 도면번호 안 밀림). + - 검증완료: test_376 7개 · 관련 시험 44 통과 · 8005 API 목록 맨 뒤 17번 · 단건 616 개체 + 가이드 · B09 인쇄 목록 중복 막음 한 줄. +- [x] 376-2 좌측 카드 · 단추 · CAD 열기 — 확인: 화면(검증 프로젝트 조합 도면 열림 · 밝음 · 어두움). + - 검증완료: 검증_sub3 빈 카드 글 → B05 기슭막이 + 조합 SP3-000015 [저장] → 단추 1 · CAD 도면 + 도각(도면명 · SD-000006) · 밝음 · 어두움 · [확정] → 다른 도면 갔다 와도 확정본 · 되돌림(지움 · [저장] · 장부 흔적 지움) · B05 [저장]이 관 측점을 정수로 맞춰 횡단 5장 → 4장(B05 고유 동작 · 그대로 둠). + +## 377. B07 전개도 (요구 241-2 · 3 · sub8 · Opus high) + + +- 정함(브레인): 서버 파이썬 생성기(DXF 에도 남게 무늬 = 기본 도형) · 묶음 = (구조물 종류 · 형태)마다 한 장(관보호공 = 배관 유입 · 유출 + 추가 흙막이 · BOX · 세월교 흙막이 = 각 그룹 · 흙막이 · 옹벽(wall_form) · 노면보호공 콘크리트 · 쇄석 포설) · 박스 = 종단 길이(거리 = 종점 − 시점) × 벽 높이 H(포장은 폭 B) · 양 끝 측점 「No.04+08」 · 「H=2.0」 · 아래 「L=6.0m」 · 우하단 표(측점 · 거리 · 높이/폭 · 면적 · 계) · 도각 · 길이 없는 것 빼고 「길이 미입력 N곳」 · 높이 빈칸 = 박스 + 「H=미입력」 · 추가 단 = 별도 박스 · 축척 자동 · 근거 1장 · 그림 docs/raw/요구_1017/그림_241_*.png. +- [x] 377-1 전개도 자료 · 묶음 · 그림 생성기(새 파일) — 확인: 시험(측점 표기 · 묶음 · 거리 · 면적 · 계 = 그림 예 85 m × 3.5 = 297.5). +- [x] 377-2 좌측 「전개도」 카드(하위 묶음) · CAD 열기 · 내보내기 — 확인: 화면 + DXF 내보내기 무늬 · 표 남음. +- 검증완료(377): test_241 13 통과 · typecheck · 검증_sub8 흙막이 · 옹벽 · 돌쌓기(메) · 포장 넣어 [저장] → 카드 5장 진짜 클릭 · 밝음/어두움 · 포장 No.22+00~No.26+05 85.0 m · DXF 무늬 선 9,709 · 표 글 남음 · 넣은 것 지우고 [저장] 되돌림(관 정수 측점 맞춤으로 횡단 장 5 → 4 = B05 저장 동작). +- [x] 377-3 test_b07_cross_overlay_extent 기대값 어긋남 까닭 가림 — 371-1(벽 0.5 m 내려가 다단 없음 · 끝 선 짧아짐) 의도 바뀜 → 기대값 갱신(x_max 13.8216 → 10.4804 · y 범위 17.7502 → 15.8101). +- 검증완료(377-3): 371-1 TS 만 옛 판이면 옛 기대값 3 통과(까닭 확정) · build:b07-extent 다시 지음 · overlay_extent 3 · wall_shape_unified · 79 · 80 · 186_1 합 28 통과. + +## 378. ☰ 서랍 — 폭 · 구분 · 홈페이지 메뉴 접기 (요구 241-4 · sub2 · Sonnet high) + + +- 정함(브레인): 폭 240 px · 바탕 --color-surface(패널과 다름) · 프로젝트 화면 오른쪽 가장자리 2 px 강조색 · 프로그램 · 회사소개 · 소식 · 교육 · 기술지원 = 접는 묶음(details · 기본 접힘 · 기억 안 함) · 근거 2장. +- [x] 378-1 서랍 폭 · 바탕 · 가장자리 · 메뉴 접기 — 확인: test_device_drawer 고쳐 씀(묶음 순서 · 접힘 · 펼쳐도 서랍 열린 채 · 폭 < 패널 · 바탕 ≠ 패널) + 화면(밝음 · 어두움). 검증 대기 — 검증완료: 시험 2 통과(실제 브라우저 포함 · 폭 240 < 패널 · 바탕 ≠ 패널 · 접힘 기본 · summary 누름 = 펼침 + 서랍 유지) · typecheck 통과 · 커밋 1a96aa196 · 화면 확인(밝음 · 어두움 · 좁은 폭)은 ORCA 탭 차례 못 받아 사용자 몫. + +## 379. B06 — 교차점 = 사면처럼 · 좌상 표 지움 · 표고 상자 둘 (요구 241-5 · 6 · 7 · sub4 · Opus high) + + +- 정함(브레인): 절성토 없는 자리 교차점 = 마우스 올리면 사면과 같은 강조 · 누르면 사면과 같은 고름(제목 「사면 이동 좌/우」 · 「절·성토 없음 · 」 · ◀↺▶ · 방향키 · 원 8 px) — 올리기만으로 고르지는 않음 · 카드 좌상 면적표 지움(모달 표 그대로) · Y축 상자 둘 = 원지반고(녹색 = 원지반선 색) + 계획 중심고(보라 = 설계선 색 · 십자선 값) · 겹치면 원지반 상자만 비킴 · 값 그대로 · 근거 3장. +- [x] 379-1 교차점 hover · 제목 · 정확히 0 자리 시험 — 확인: helper_370_2 section(stop) 경우 + 화면. 「절·성토 없음」 판정 = 노견 끝 = 원지반 ±5 mm(브레인 A). +- [x] 379-2 카드 좌상 면적표 지움 — 확인: test_173 고쳐 씀 · 모달 표 그대로. +- [x] 379-3 표고 상자 둘 · 겹침 비킴 — 확인: test_318 고쳐 씀(겹침 경우 원지반 y 만) + 화면. +- 검증완료 — 시험 28 통과 · typecheck · ORCA 5179 검증_sub4(올림 강조 · 누름 ◀↺▶ · 방향키 · 표 0 · 상자 색 = 선 색 밝음/어두움 · 겹침 ±16 px · 상세 창 · 되돌림) · 검증 대기. +- [x] 379-4 합침 시험 셋 맞춤 — 까닭 = 시험이 옛 모양(helper_150 가짜 선택자가 370-3 `:not(.b06-chart__rock-hit)` 못 읽음 · test_294_1 은 307 에서 `splitPipePick` 로 옮긴 길) · 화면 흠 아님 · 시험만 고쳐 씀. +- 검증완료 — test_150 · 294_1 · 173 · 318 · 370_2 · 370_3 47 통과 · 검증 대기. + +## 380. 사토장 · 토취장 — 횡단 그림 · 조절 없음 · 기존 측점만 · CAD 글 (요구 241-8 · sub5 · Opus high) + + +- 정함(브레인): 부품 처음값 사토장 형상 · 3D = 없음(횡단 그림 · 사토 단면 셈 · 3D 면 끔) · 자리 = 가까운 기존 측점(일반 · 구조물 · 추가) 맞춤(폼 · 끌기 · 우클릭 · 방향키) · 새 측점 안 심음 · 상세 모달 CAD 글에만 「사토장 · 부피」 줄(저장된 칸은 그대로) · 사토 단면 셈 코드 = B08 수량 · 유토 배분이 안 쓰면 지움(쓰면 남기고 보고) · 토취장은 사용자가 M02 에서 켬 · 근거 3장. +- [x] 380-1 처음값 · 남은 사토 값 정리 · 죽은 길 — 확인: test_322_1 · 349_0n · spoil 시험 고쳐 씀 · B08 수량 시험. +- [x] 380-2 기존 측점 맞춤 · CAD 글 — 확인: 시험(아무 m 입력 = 가까운 측점) + 화면(카드 그림 없음 · 모달 CAD 글). +- 검증완료(380 · 검증 대기): 시험 · typecheck 통과 · 화면 폼 47 m → 40 · 끌기 → 60 · 우클릭 33 m → 40 · 카드 사토 그림 0 · 모달 CAD 「사토장 부피 150㎥」 · 빈 부피 = 이름만 · 방향키 = 관만 옮겨 사토장 몫 없음. +- [x] 380-3 노선 따라간 site(사토장 · 토취장) = 새 노선 일반 측점 맞춤(파이썬 · TS 짝) · test_322_2 마스터 판 독립 — 확인: test_380_3 거울 + 화면(노드 끌기 뒤 사토장 측점 = 기존 측점). +- 검증완료(380-3 · 검증 대기): 시험 · typecheck 통과 · 화면 노드 끌기 노선 1078 → 1099.3 m · 관 +21 m · 사토장 240 → 260(일반 측점 · 정수 따라감이면 261) · 저장 안 함 · 탭 닫음. +- [x] 380-4 글만 있는 상세 CAD 맞춤 — 브레인 화면: 검증_브레인232 5+0 사토장(부피 빈 값) 상세 「표 위 CAD」 = 「NO.5」 · 「유용토운반작업장(사토장)」 두 줄이 크게 확대돼 둘째 줄 아래 잘림(4+16 배관 = 원 마크와 함께 보통 크기). 고침: 글만 있어도 다른 측점과 같은 글 크기 · 잘림 없음. 확인: 화면(사토장 · 부피 있음/없음 · 배관 측점 그대로). +- 검증완료(380-4 · 검증 대기): CAD 맞춤 최소 높이 16(B06 상세만) · 시험 cad fit-min-height 3 · note_cad 41 통과 · 화면 글 높이 2+0 사토장(빈 값) 20 px · 3+0(150㎥) 20 px · 4+5 배관 16 px(원 마크 · 긴 옵션 줄) · 모든 줄 칸 안(잘림 0) · 어두움 같음 · 저장 안 함 · 복구본 지움 · 탭 닫음. + +## 381. B05 평면 — 되돌리기 아이콘 · 절성토선 색 · [측점] [기울기] · 교각점 (요구 241-9 · 10 · 11 · 14 · sub6 · Opus high) + + +- 정함(브레인): 되돌리기 · 다시하기 = 곧은 꼬리 갈고리(↩ ↪) 그림(평면 · 종단 도구줄 같이) · 절토 = 붉음(밝음 #e11d48 · 어두움 #ff6b6b) · 성토 = 청록(밝음 #0d9488 · 어두움 #2dd4bf) · 굵기 도로 끝 1.8 · 비탈 끝 2.6 · [측점] [기울기] = 절/성토선 왼쪽 켬끔(기본 켬 · 페이지 동안 · 측점 끄면 눈금 집기도 끔 · 시점 · 종점 이름표 남김 · 기울기 끄면 높이 요청 멈춤) · 교각점 반지름 6 · 집기 12 px · 맨 위에 그림 · 마우스 근처 = 고리 강조 · 겹치면 노드 중심 6 px 안 = 노드 · 밖 = 가까운 쪽(횡단 눈금과 한 함수) · 근거 4장. +- [x] 381-1 아이콘 · 색 · 굵기 — 확인: chrome_modal · 346_2 시험 고쳐 씀. +- [x] 381-2 [측점] [기울기] 켬끔 — 확인: 시험(끄면 눈금 집기 없음) + 화면. +- [x] 381-3 교각점 크기 · 차례 · 맴돔 강조 · 집기 우선 — 확인: test_b05_routeedit_pick 통과 + 겹침 경우 시험. +- 검증완료(381 · sub6): 시험 102 통과 · typecheck · ORCA 5181 검증_sub6 — 맴돔 노드 grab · 눈금 pointer · 겹침 경계 노드/눈금 갈림 · 눈금 누름 = 12+0 횡단 · 노드 누름 = 고름(편집 없음) · [측점] 끔 = 눈금 사라짐 · 집기 없음 · [기울기] 끔 = 라벨 사라짐 · 어두움 절토 #ff6b6b · 성토 #2dd4bf · 바꾼 값 되돌림(계획노선 1078.0 m). + +## 382. B05 우측 횡단 판 양식 · 평면 고름 연동 · 파란 법선 (요구 241-12 · 15 · sub7 · Opus high) + + +- 정함(브레인): 우측 판 = 패널 양식(ui_template_side_panels — 손잡이 · 머리 · 폭 끌기 · 열림 기억) · 자리는 지도 위 덮개 그대로(235-2) · 평면 = 공용 고름 한 칸 구독(일반측점 고르면 그 측점 횡단 판 · 눈금 강조 · 구조물 고르면 그 자리 마름모) · 평면 눈금 클릭 = 공용 고름에 적음 · 파란 법선 = 측점 열쇠로 들고 묶음 차례마다 다시 짚음 · 폭 = 그 측점 발자국 기록 비탈 끝 좌우 · 절성토 색 · 일반측점만 · 근거 4장. +- [x] 382-1 우측 판 양식 — 확인: chrome_modal 시험 고쳐 씀 + 화면(덮개 · 폭 끌기 · 열림 기억). +- [x] 382-2 고름 연동 · 법선 갱신 — 확인: 시험(노선 고친 뒤 법선 = 새 발자국 · 다른 보기 고름 = 평면 판) + 화면. +- 검증완료(382 · sub7): 시험 84 통과 · typecheck · ORCA 5182 검증_sub7 — 손잡이 폄 = 판 460 px 지도 위 덮개(지도 폭 그대로) · 끌기 611 px 기억 · 횡단 보기 다녀와도 열림 · 폭 그대로 · 접힘 = 손잡이만 · 눈금 클릭 = 고름 at 200 · 종단 10+0 강조 · 법선 grid:10 좌 19.8 성토 · 우 3.99 절토 = 발자국 선 끝 · 노드 끌기 뒤 좌 9.55 · 우 5.49 새 선 끝 · 이전 횡단 남음 · 종단 11+0 고름 = 평면 11+0 · 세월교 고름 = 8+15 마름모 · Esc = 법선 · 판 비움 · 밝음 색 확인 · 바꾼 값 되돌림(되돌리기 · 취향 키 지움). + +## 383. R = 일반측점 기본 제약 · 노선 추천 · 방향키 · [재계산] (요구 241-13 · 16 · 18 · sub1 · Opus high) + + +- 정함(브레인): 「MC = 서로 다른 일반측점」 = 사용자 규칙(지식DB 근거 없음 · 곡선 간격 ≥ 20 m) · 새 초기 노선 = 서버가 맞춤 + 측점 스냅 켬 · 추천 = 후보마다 맞춘 선으로 고르기 · 쓸기(ALGO 5 · 측점 밖 0 후보 앞세움 · 남은 곳 「못 지킨 구간」) · 추천 [적용] = 스냅 켬 저장 · 옛 저장 프로젝트 깃발 그대로(말없이 측점 안 바뀜) · 손 편집 못 맞춘 곡선 = 그대로 + 개수 · 교각점 방향키 0.1 m(화면 축 · Shift ×10 · 누르는 동안 옮김 · 뗄 때 한 걸음 · 스냅이면 그때 맞춤 + 상태줄 「실제 이동 · 함께 밀린 IP」) · 평면을 누른 뒤 ▲▼ 는 종단으로 안 감 · [재계산] = 측점 맞춤 오른쪽 같은 줄 · 늘 보임(바꾼 것 있을 때만 켜짐) · 근거 5장. +- [x] 383-1 초기 노선 맞춤 · 추천 후보 맞춤(ALGO 5) · [적용] 깃발 — 확인: 시험(새 사본 측점 밖 ≈ 0 · 옛 사본 깃발 · 측점 그대로). + - 검증완료 — 시험 153 통과 · 검증_sub1 새 초기 노선 곡선 25 · 측점 밖 0 · 추천 측점 밖 곡선 = 「못 지킨 구간」(station) · 첫 셈 74.6 s → 42.6 s · 검증 대기. +- [x] 383-2 교각점 방향키 — 확인: 시험(0.1 m · 스냅 때 뗄 때 맞춤 · 종단 ▲▼ 안 샘) + 화면. + - 검증완료 — 시험 35 통과 · 화면(검증_sub1 · 5174) ▲ = 북 0.100 m · Shift+→ = 동 1.000 m · 스냅 켬 「실제 이동 0.4 m · 함께 밀린 IP 6곳」 · 「같은 측점」 안내 · 평면 누른 뒤 ▲▼ 종단 안 바뀜(종단 누른 뒤엔 바뀜) · 값 되돌림 · 검증 대기. +- [x] 383-3 [재계산] 자리 — 확인: 화면(측점 맞춤 오른쪽). + - 검증완료 — 화면 측점 맞춤 오른쪽 8 px 같은 줄 · 늘 보임 · 칸 바꾸면 켜짐 → 재계산 뒤 꺼짐 · 밝음/어두움 · 비중 계산 「No.12+12.4 측점 밖 7.6m」 표기 · 검증 대기. + +## 384. B05 · B06 한 페이지 · 캐시 공유 — 방법 제시 (요구 241-17 · 브레인 · 코드 X) + + +- 근거: 분석 6장(같은 자료 여러 벌 · 두 페이지처럼 도는 자리 열한 곳 · 목표 원칙 일곱 · 옮기는 차례 0~7). +- [x] 384-1 사용자 답(요구 242) = 제안대로 반영 뒤 판단 · 편의성 · 보안 고려 → 386 · 387 · 388. + +## 385. 요구 240 · 241 마무리 — 합치기 · 브레인 화면 검증 · 아티팩트 (브레인) + + +- [x] 385-1 합치기 · 서버 묶음 · 고친 대상 시험 · typecheck. +- [x] 385-2 브레인 사용자처럼 브라우저 검증(240 V21~V31 남은 것 + 241 목록) — 흠은 창에 고침 → 다시 잼. +- [x] 385-3 아티팩트 보고 하나(240 · 241 요구별 결과 · 수치 · 사진 · 정함 목록 · 384 방법 제시 · 남은 것). +- 검증완료(385) — 합침 · 묶음 다섯 · CAD 앱 다시 지음 · typecheck 0 · 고친 대상 시험 통과(남은 실패 = 옛 302_1 · 254_1 · 52_6) · 브레인 화면 V1~V47 · 흠 넷(369-3 · 370-4 · 370-5 · 380-4) 고친 뒤 다시 잼 · 371-4 흠 아님 · 아티팩트 https://claude.ai/artifact/XAtt2TrSurCzPAygQhrCa5 · 검증 대기. + +## 386. 한 페이지 ① — 기준 · 페이지 자료 줄 · 묶음 입력 · 저장 한 줄 (요구 242 · 384 실행 · sub7 · Opus high) + + +- 정함(브레인): 384 방법 그대로 · 차례 0 → 2 → 3 → 6 · 5단계(보기 = 그리는 쪽)는 미룸(화면 효과 없음 · 0 다시 잰 뒤) · 단계마다 test_365_page_pipeline + 바퀴(열 때 1 · 같은 입력 0) 통과가 문 · 근거 `docs/raw/조사/2026-10-17_386_요구242_분석.md` 1장. +- [x] 386-0 기준 잼(코드 X) — 전환당 /api 수 · 전환 끝 ms · 열 때 바퀴(B05 먼저 · B06 먼저 · 새로고침) · 세션 글자 수 → 이 줄 아래 한 줄. + - 기준(5182 검증_sub7 · 두 번) — 열 때 /api B05 22~23 · B06 15(구조물 받기 둘 다 2) · 끝 B05 7.5~7.8 s · B06 2.1~4.1 s · 열 때 바퀴 B05 먼저 1~2 · B06 먼저 1 · 새로고침 B05 2 · B06 1 · 처음 다른 보기 = 바퀴 2 · /api 6(B05→B06) · 13(B06→B05) · 그 뒤 전환 /api 2~3(구조물 · 정의 판 · 관 또는 haul-plan) · 바퀴 0 · switchMs 54~477 · 끝 0.5~1.0 s · 세션 1 876 116 자(section-detail 1 511 817). +- [x] 386-2 페이지 자료 줄(새 design_page_data.ts · 저장분 한 번 · 노선 id 한 칸 · onShow 받기 지움 · 「계산 중」 점) — 확인: 전환당 /api 0 · 열 때 구조물 받기 1 · 새 test_384_2. + - 검증완료 — 시험 73 파일 통과(test_384_2 · test_365 포함) · typecheck · 묶음 둘 다시 지음 · 5182 검증_sub7 전환 /api 0(진짜 단추 · 저장 안 한 관 초안 그대로) · 열 때 구조물 받기 1 · 처음 다른 보기 /api 3(B05→B06) · 11(B06→B05) · 「계산 중」 점 열 때 0.3 s 켬 · 밝음/어두움 · 값 되돌림 · 노선 id 한 칸은 미룸(읽는 곳 = RC sub4 줄 · DPr 700 · VC 688) · 검증 대기. +- [x] 386-3 묶음 입력 = 가게만(보기 측점 심기 · baseMoved 지움) — 확인: baseMoved 0 · 바퀴 그대로. + - 검증완료 — 묶음 planline 기준 = 입력이 심는 측점(design_pipeline_base · 보기 심기는 그림만) · test_384_3 · test_365 통과 · 5182 열 때 바퀴 B05 먼저 1 · B06 먼저 1 · 새로고침 1 · 처음 다른 보기 0(전 2) · 같은 입력 0 · 검증 대기. +- [x] 386-6 [저장] 본문 보기 무관(B05 만 연 길 지움) — 확인: B05 만 연 [저장] 본문 = B06 다녀온 본문. + - 검증완료 — test_384_6 · 저장 시험 7 파일 통과 · 5182 검증_sub7 새 탭 B05 만 연 [저장] = 횡단 보기 숨긴 채 섬 → sections/304/save 본문 8 868 자 · 패치 67 = B06 다녀온 [저장] 본문 그대로(차이 칸 0) · 값 안 바꿈(같은 본문 두 번 · 구조물 판 도장 한 번) · 검증 대기. +- [x] 386-2b 노선 id 한 칸(386-2 에서 뗌 · 읽는 곳 RC:99-117 · design_profile(700) · design_view_cross(688)) — 387 합친 뒤 sub7 · design_profile 먼저 쪼갬. 확인: 노선 id 출처 1 · test_365. + - 검증완료 — 칸 = design_page_route(채움 = 자료 줄 pageSectionContext 하나) · 읽는 곳 PA · VC · design_profile render · RC · 3D · 측점 그림 · design_profile 678줄(쪼갬 = design_profile_context) · test_384_2b · test_365 · min_cover_guard 포함 78 파일 통과 · typecheck · 묶음 넷 다시 지음 · 5182 검증_sub7 칸 304 = context 304 · 전환 /api 0 · 바퀴 그대로 · [저장](진짜 단추) sections/304/save 200 · 저장 뒤 첫 전환만 한 번 다시 받고 0 · 노선 초안(새 노선) 화면 조작은 못 함(시험 test_365 초안 시나리오로 갈음) · 값 안 바꿈 · 커밋 c77e44ab0 · 검증 대기. + +## 387. 한 페이지 ② — 세션 열쇠 · 횡단 다시 셈 창구 · 결과 층 (요구 242 · 384 실행 · sub4 · Opus high) + + +- 정함(브레인): 세션 직접 접근 0(등록부만 · 프로젝트 없는 `b05:pipes` 걷음) · 되돌리기 사진 = 지금 프로젝트만 · 면적 얹기 한 곳(묶음 출력 · 화면이 공유 자료 안 고침) · 세션 section-detail = 저장 정본만 · 근거 1장. +- [x] 387-1 세션 직접 접근 → 등록부 — 확인: 새 test_384_1(design · UI_* 직접 sessionStorage 0) · test_290_1 · test_346_4. + - 검증완료 — 시험 81 통과 · typecheck 0 · 화면(검증_sub4) B05↔B06 관 10개 · 월류 폭 10.1 유지 · 되돌리기 셋 = 월류 폭 · 관 85 m 복귀 · 다른 프로젝트 칸 그대로 · 프로젝트 없는 열쇠 0 (002d0e85a · 검증 대기). +- [x] 387-4 횡단 다시 셈 창구 하나 · 면적 한 곳 — 확인: 부르는 곳 1 · B05 만 연 면적 = B06 연 면적 ±0.01. + - 부르는 곳 1 · 화면 면적 쓰기 0 · ▲ 한 번 = 차례 1 · cross 1 · 되돌리기 원래 면적 · B05↔B06 오가도 같은 값(검증_sub4) — 6a3f9647f. + - 덧(sub5 4+5 · 브레인 10+0): 셈 어긋남 아님 — 검증_sub4 노선 234 저장 상세로 브라우저 다시 셈 = 서버 [저장] 다시 셈 차례(설계 다시 냄 + 지표면 넓힘 + Node 면적 · 쓰기 없이) 66 측점 최대 차 0.0001 ㎡ · 저장분과 다른 16곳(구조물 · 연동 이웃)은 옛 코드로 낸 저장분 낡음. + - 남음 ⬜ 브레인 답 필요: B05 만 연 면적(절토 합 452.72) ≠ B06 연 뒤(434.58) — 관 옵션(벽 높이 · 형태 · 세월교 · BOX 폼) → 횡단 조정값 옮김(`B06_Section_UI_Page_Pipe_Options` · `bindPipeOptions`)이 B06 보기를 열 때만 돎 · 구조물 측점만 다름 · 제안 = 그 옮김을 상세 가게 얹기(`B06_Section_Section_Adjusts`)로 내림. +- [x] 387-7 결과 층 정리 — 확인: 열 때 상세 JSON.parse 1 · 세션 글자 수 386-0 보다 줆. + - 검증완료 — 세션 상세 풂 1(test_384_7) · 세션 상세 = 받을 때 정본만(갈아끼움 · 되돌림 안 씀) · 세션 글자 수 화면 재기는 못 함(01a4a54bd · 검증 대기). +- [x] 387-4b 관 옵션 → 횡단 조정값 옮김(B06_Section_UI_Page_Pipe_Options · bindPipeOptions = B06 보기 열 때만 돎)을 상세 가게 얹기(새 B06_Section_Section_Adjusts)로 — 확인: B05 만 연 면적 = B06 연 뒤 면적(검증_sub4 절토 합 452.72 vs 434.58 → 같음) · 387-4 체크. + - 검증완료 — 시험 870여 통과(새 test_387_4b) · typecheck 0 · 화면(검증_sub4) B05 만 연 절토 · 성토 합 = B06 연 뒤 442.3726 · 824.768 · 관 옵션 2 → 2.1 뒤 둘 다 443.2174 · 되돌림 442.3726 · 어두움 정상(111dd6a1d · 9d3e6b242 · 검증 대기). + - 덧 갈림 둘도 같이 고침: 갈아끼운 상세를 그 차례 cross 가 못 봄(묶음 다 돈 뒤 한 번 더) · B06 폼 되보내기가 관 제원에 옵션 값을 그대로 씀(다시 셈 앞 형상 규칙으로 다시 얹음 · 집수정 높이 1.5 ↔ 2). + - 남음(별건): 관 초안 둔 채 다시 열기 = 서버 미리보기 측점 11곳이 섞여 다른 값(377.51 · B05 = B06 은 같음 · 종단 판 접힘이면 그리기 판정이 안 돎). +- [x] 387-8 관 초안 둔 채 다시 열면 서버 미리보기 측점 11곳 섞여 다른 값(절토 합 377.51 · B05 = B06 은 같음) · 종단 판 접혀 있으면 그리기 낡음 판정 안 돎(sub4 보고) — 원칙 4(보기가 숨어도 계산 · 판정은 돎 · 그림만 멈춤). 확인: 시험(접힌 종단 판 + 관 초안 다시 열기 = 펼친 때와 같은 값) + 화면. + - 검증완료 — 낡음 판정 = 상세 가게 몫(읽은 뒤 묶음 차례가 끝나면 화면 선 대비 낡음이면 cross 한 번 더 · 같은 낡음 한 번만) · 새 test_387_8 포함 시험 322 통과 · typecheck 0 · 묶음 다시 지음 · 화면(검증_sub4 · 같은 관 초안) 종단 판 접힘 · 펼침 둘 다 B05 = B06 = 368.6348 · 1012.4423 · 낡은 측점 0(미리보기 11곳) · 초안 원래대로 되돌림(89728f83f · 검증 대기). + +## 388. 한 페이지 ③ — 보안 (요구 242 · sub5 · Opus high) + + +- 정함(브레인): 로그아웃 = 떠남 확인 먼저 → 서버 로그아웃 → 초안 · 결과 · 현재 프로젝트 · 지형 보관 지움 → 새로고침 · 계정 바뀜(같은 탭 다른 계정)도 같은 지움 · [확정] 면적 · 관 길이 = 서버 셈만(브라우저 값 안 받음 · 셈 실패 = 화면 경고) · 세션 넘침 = 결과 칸 비우고 다시 · 그래도 넘치면 안내 · 탭이 연 프로젝트 고정 · 근거 1장. +- [x] 388-1 로그아웃 · 계정 바뀜 지움 — 확인: 새 test_384_s_logout_wipe + 화면(초안 있는 채 로그아웃 → 확인창 → 지워짐). + - 검증완료: 시험 6 · 5180 검증_sub5 확인창 [취소] 머묾 · [폐기] 세션 0 · 프로젝트 없음 · 401 · 지형 0 · 계정 바뀜 한 번 새로고침 · 밝음/어두움(검증 대기). +- [x] 388-2 서버 정본 셈만 — 확인: 새 test_384_s_area_keys(면적 보내도 정본 = 서버 값) · test_b05_b06_save_roundtrip. + - 검증완료: 시험 7 · 5180 4+5 면적 999 보냄 → 정본 13.6928 · 0.6962 · 7.9(서버) · recomputed:true · 왕복 시험은 배정 프로젝트 없음으로 건너뜀(검증 대기). +- [x] 388-3 세션 넘침 · 탭 프로젝트 고정 — 확인: 시험. + - 검증완료: test_384_s_logout_wipe 넘침 · 안내 · 고정 3건(검증 대기). +- [x] 388-4 쓰기 권한 — 사용자 확정(251-1): 회사 프로젝트는 소속 사용자 전체 권한 · 지금 그대로 · 코드 고침 없음. + +## 389. ☰ 정렬 · 서랍 간격 · 좌측 카드 기본 닫힘 (요구 242-1 · 2 · 3 · sub2 · Sonnet high) + + +- 정함(브레인): ☰ 중심 = 좌측 패널 제목 줄 중심(제목 줄 마우스 높이 48 → 52 · ☰ 자리 그대로) · 서랍 간격 = 8/12 체계(묶음 안 8 · 묶음 사이 12 + 선 + 12 · 줄 높이 마우스 40 · 손가락 44 · 글 왼쪽 16 · 로고 줄 = ☰ 높이 가운데) · 좌측 카드 = 모든 페이지 기본 닫힘(B05 · B06 구조물 배치 · 노선 추천 · B07 토적도 · 구조물 도면 · 전개도 · B08 넷 · B09 인쇄 둘 · M02 구조물 집계 양식 · 우클릭 추가 때 펴기는 그대로 · 접힌 카드 안 상세 펼침은 그대로) · 근거 2장. +- [x] 389-1 ☰ 세로 정렬 — 확인: 화면 ☰ 중심 = 제목 줄 중심(마우스 · 손가락) · test_device_drawer. 검증완료(마우스 26=26 · 손가락 30=30 · 검증 대기) +- [x] 389-2 서랍 간격 — 확인: 화면 간격 수치 · test_device_drawer · test_225_drawer_shortcuts. 검증완료(묶음 안 8 · 사이 12+선+12 · 줄 40/44 · 글 16 · 로고 줄 ☰ 가운데 · 검증 대기) +- [x] 389-3 좌측 카드 기본 닫힘 — 확인: test_311_panel_folded 고쳐 씀 + 화면(페이지마다 첫 열기 닫힘). 검증완료(B05 · B06 · B07 · B08 · B09 인쇄 · M02 첫 열기 전부 닫힘 · 검증 대기) + +## 390. B05 평면 도구줄 — 구분선 · 스냅 간격 · Ctrl+휠 회전 · 기울기 끔 (요구 242-4 · 11 · 16 · 17 · sub1 · Opus high) + + +- 정함(브레인): [측점 스냅] | 분석 지형 사이 구분선(분석 지형 숨으면 같이 숨김) · [측점 스냅] 오른쪽 「스냅 간격」 고르기(분석 지형 양식 · 0.1 m · 1 m · 10 m · 측점 No. · 기본 측점 No. · 프로젝트별 화면 기억 · 스냅 끄면 흐림) = 곡선 MC 를 그 간격 배수에 맞춤(허용 오차도 간격 따라 · 측점 값 정수 m 규칙 그대로 · 서버 초기 노선 · 추천 = 측점 No. 그대로) · Ctrl+휠 = 한 칸 5° 회전(단추 15° 그대로 · 손가락 · 트랙패드 벌림 빼고) · [기울기] 기본 꺼짐 · 근거 3장. +- [x] 390-1 구분선 · [기울기] 기본 꺼짐 — 확인: test_b05_routeedit_initial · test_381_2 고쳐 씀. + - 검증완료 — 시험 90 통과 · 화면 구분선 5개(분석 지형 숨기면 앞 구분선 none) · [기울기] aria-pressed false · 밝음 · 어두움. +- [x] 390-2 스냅 간격 고르기 — 확인: 시험(간격마다 MC 배수 · 측점 밖 개수 같은 간격) + 화면(1 m · 10 m 끌기 뒤 MC). + - 검증완료 — 검증_sub1 끌기 뒤 1 m 최대 어긋남 0.046 · 0.1 m 0.003 · 측점 밖 0 · 10 m · 측점 No. 못 맞춘 3곳 = 상태줄 3 · 스냅 끔 흐림 0.5 · 「0.1 m」 = 방향키 한 걸음(KEY_STEP_M) 상태줄 「실제 이동 0.1 m」. +- [x] 390-3 Ctrl+휠 회전 — 확인: 시험(벌림 = 확대 그대로) + 화면 · 도움말 한 줄. + - 검증완료 — 화면 Ctrl+휠 한 칸 5° · 단추 15° · 트랙패드 벌림 · 맨 휠 = 확대(회전 0) · 도움말 「Ctrl+휠 = 돌리기(한 칸 5°)」 · 검증 대기. +- [x] 390-4 스냅 상태줄 글 = 고른 간격 따라(브레인 화면: 간격 1 m 인데 「곡선 가운데(MC)를 일반측점에 맞췄습니다」 · RouteEdit.ts:266 · :538 고정 글) — 측점 No. = 지금 글 · 0.1 · 1 · 10 m = 「… m 배수에 맞췄습니다」. 확인: 시험 + 화면 글. + - 검증완료 — 간격별 글 시험(test_390_4) · test_366_3 · routeedit_initial · 224_2 56개 통과 · typecheck 통과 · 화면 글은 브레인 마무리 때. +- [x] 390-5 스냅 간격 = 조작 단위(요구 243) — 정함(브레인): 스냅 켬이면 ① 방향키 한 번 = 고른 간격만큼(0.1 · 1 · 10 m · 측점 No. = 측점 간격 · Shift 안 씀) 옮기고 MC 를 그 간격 배수에 맞춤 ② 끌기 = 끄는 동안 맞춘 자리로 바로 보임(놓을 때만 아님) ③ MC 측점 값 = 고른 간격 정밀도(0.1 = 소수 한 자리 · 1 이상 = 정수 · 다른 측점은 정수 그대로 · 간격을 저장 노선에 같이 저장해 서버 측점 셈도 같은 값 · 파이썬 짝). 확인: 시험(간격별 방향키 걸음 · 끌기 미리보기 · MC 값 · 서버 짝 거울) + 화면(0.1 · 1 · 10 · 측점 No.). + - 검증완료 — 시험 435개 통과(test_390_5 33 · 383_2 · 366_3 · 224_2 · frame_mirror 등) · typecheck · 서버 묶음 다시 지음 · 화면(검증_sub1 · 5174): 방향키 두 번 = 0.1 m → MC 380.0 · 380.1 · 380.2 · 1 m → 380 · 381 · 382 · 10 m → 380 · 390 · 400 · 측점 No. → 120 · 100 · 끄는 동안 MC 눈금 19+0 · 놓은 뒤 같은 값 · 평면 눈금 19+0.2(0.1 때만 소수) · 밝음 · 어두움 · 저장 안 하고 되돌림. + +## 391. B05 평면 그림 — 20 m 법선 · 곡선 3점 · 곡선 없는 교각점 삼각형 · 잠금 색 (요구 242-5 · 6 · 12 · 13 · 15 · sub6 · Opus high) + + +- 정함(브레인): 측점 맴돔 선 = 고른 선 = 중심선 좌우 20 m 고정 법선(하늘 #0ea5e9 · 짧은 12 px 선 지움 · 절성토 색은 발자국 선이 보여 줌) · 고른 곡선(교각점 · 호) = 호 굵게 + 교각점→BC · EC 접선 + BC · MC · EC 세 점(고름 하늘색) · 곡선 없는 교각점(155° 생략 · 손 지움 모두) = 같은 크기 삼각형(모양만) · 잠긴 노선 · 점 = 황금(밝음 #ca8a04 · 어두움 #facc15 · 굵기 4 + 흰 테) · 근거 4장. +- [x] 391-1 맴돔 = 고름 20 m 법선 — 확인: test_381_3 · cross_width 고쳐 씀 + 화면. +- [x] 391-2 곡선 3점 강조 · 삼각형 — 확인: 시험 + 화면(밝음 · 어두움). +- [x] 391-3 잠금 색 — 확인: 시험(토큰 값) + 화면 대비. +- 검증완료(sub6) — 시험 66 통과 · typecheck · 화면(검증_sub6 · 맴돔 = 고름 좌우 20 m 각 212 px = 측점 20 m 간격 · 곡선 3점 · 삼각형 · 황금 잠금 · 밝음 · 어두움 · 바꾼 값 되돌림) · a0a29fd00 · 검증 대기. + +## 392. B05 하단 판 — 배수유역 기본 닫힘 · 높이 제어 10-14 방식 (요구 242-9 · 10 · sub8 · Opus high) + + +- 정함(브레인): 배수유역 판 기본 닫힘(옛 기억 한 번 버림 · B06 도 같이) · 높이 제어 = 10-14 판(9edaec82e) 되살림 — 유토곡선 = 종단 칸 바닥 덮는 판 · 판 끌기 = 종단 · 유토 · 표 세 영역 같은 비율 · 유토 손잡이 = 판 위 경계 밖 표 손잡이와 나란히 · 접기 = 숨김 · 남김 = 유토 [창 분할](펼친 때만 · 235-7 「분리」 = 창 분리로 읽음) · 367-1 늘 전체 맞춤 · 367-5 · 354-3 · 325-2 · 근거 3장. +- [x] 392-1 배수유역 기본 닫힘 — 확인: 시험(기억 없음 = 닫힘) + 화면. + - 검증완료 — 옛 열쇠 "false" 버리고 닫힘 · 펼친 기억 B05 · B06 새로고침 유지 · ed3f454c6 +- [x] 392-2 하단 판 높이 제어 10-14 방식 — 확인: 시험(세 영역 비례 · 손잡이 자리) + 화면(판 끌기 · 유토 끌기 · 접기 · 창 분할 · 밝음 · 어두움). + - 검증완료 — 판 끌기 유토 160→211 · 표 140→184(×1.32) · B06 ×1.36 · 줄이기 하한 종단 100 · 손잡이 바닥 = 판 위 · 표 손잡이와 88 px 나란히 · 유토 끌기 +80 · 접기 숨김 · 창 분할 오감 · 축 띠 가림 z6 고침 · 8b72720d0 · 50c40d564 + +## 393. B05 우측 횡단 판 — 기본 접힘 · B06 횡단도 그대로 (요구 242-7 · 8 · sub3 · Opus high) + + +- 정함(브레인): 우측 「횡단」 판(사용자 말 「좌측 패널 횡단」 = 손잡이가 왼쪽에 있는 이 판) 기본 접힘(옛 기억 한 번 버림 · 측점 눈금 누르면 열리되 기억 안 함) · 「횡단」 · 「이전 횡단」 칸 = B06 횡단도 카드를 읽기 전용으로(구조물 · 포장 · 면적 · 축 · 종단 계획고 · 횡단 설계 반영 · 단면 사본 · B06 고름 안 건드림) · 종단 임시 횡단 창은 지금 그림 그대로 · 근거 5장. +- [x] 393-1 기본 접힘 — 확인: test_b05_routeedit_chrome_modal 고쳐 씀 + 화면. +- [x] 393-2 B06 횡단도 읽기 전용 — 확인: 시험 + 화면(구조물 있는 측점 = B06 카드와 같은 그림 · 평면 노선 고친 뒤 갱신 · B06 고름 그대로). + - 검증완료(sub3) — 시험 46 통과 · typecheck · 묶음 셋 다시 지음 · 화면(검증_sub3 · 옛 열림 기억 있어도 접힘 · 눈금 열림 기억 없음 · 손잡이만 기억 · 14+0 배수관 카드 요소 36 = B06 카드 같음(암 경계 포함) · 노드 끌기 뒤 위 성토 33.31㎡ · 아래 이전 40.08㎡ · B06 보라 선 고름 유지 · 밝음 · 어두움 · 바꾼 값 되돌림) · 저장 상세 = Section_Store 접근자(파이프라인 파일 700줄) · dec208f11 · a3dd0a1cf · 5f0e81345 · 검증 대기. +- [x] 393-3 우측 판 횡단 · 이전 횡단 칸 = 그래프만 칸 전체(요구 244) — 정함(브레인): 칸 제목 줄(「횡단 10+0」 · 「이전 횡단 10+0」)만 남기고 카드 머리(측점 · 거리 · 편측 성토 알약 · 성토사면) · 확대 단추 · 암 경계 줄 · 요약 줄 · 카드 테두리 걷음 · 그래프(축 · 표고 상자 · 노폭 글 포함)가 칸 폭 · 높이를 다 씀 · 판 폭 끌기 · 창 크기 따라 다시 그림. 확인: 시험 + 화면(밝음 · 어두움 · 판 폭 바꿈). + - 검증완료(sub3) — 시험 33 통과 · typecheck · 화면(검증_sub3 · 18+0 일반 · 14+0 배수관 집수정 · 그래프 409×407 = 칸 409×407 · 머리 · 발 · 줌 · 요약 없음 · 노선 고친 뒤 횡단 · 이전 횡단 둘 다 · 판 폭 끌어 559 로 다시 그림 · 밝음/어두움 · 되돌림) · f601bc301(검증 대기) +- [x] 393-4 우측 판 제목 행 걷고 그림 영역으로 · 보기 폭 = B06 횡단 반폭 공유(요구 246) — 정함(브레인): 판 머리 「횡단」 행 · 칸 제목 행(「횡단 10+0」 · 「이전 횡단 10+0」) 모두 걷음 → 측점은 그래프 왼쪽 위 작은 글(「10+0」 · 「이전 10+0」)로 겹쳐 씀 · 손잡이 · 폭 끌기 그대로 · 그래프 가로 범위 기본 = B06 좌측 「횡단 반폭」 보기값(같은 값 한 벌 · B06 에서 바꾸면 B05 판도 따라감). 확인: 시험 + 화면(B06 반폭 바꾼 뒤 B05 판 범위 · 밝음 · 어두움). + - 검증완료(sub3) — 시험 39 통과 · typecheck · 화면(검증_sub3 · 판 머리 · 칸 제목 행 없음 · 측점 글 그림 칸 왼쪽 위 · 그래프 409×458 = 칸 409×459 · 기본 ±10 m = B06 입력칸 10 · B06 15 적용 뒤 다음 그림 ±15(px/m 16.55 → 11.03) · 33+0 일반 · 14+0 배관 · 밝음/어두움 · 반폭 되돌림(되돌리기 한 걸음 = B06 적용뿐 · 섞인 편집 없음)) · bd78a41c9 · d4c8fecb8(검증 대기) +- [x] 393-5 우측 판 접힘 손잡이 = 지도 오른쪽 끝에 딱 붙임(요구 247 · 손잡이 오른쪽 빈 틈 0) — 확인: 화면 손잡이 오른쪽 끝 = 지도 오른쪽 끝(px) · 펼침 · 폭 끌기 그대로. + - 검증완료(sub3) — 시험 · 화면(접힘 손잡이 오른쪽 끝 = 지도 오른쪽 끝 · 틈 0 px(전 12) · 펼침 틈 12 그대로 · 폭 끌기 460 → 560 → 460 · 기억 되돌림) · 5c426ce4f(검증 대기) + +## 394. 옛 시험 실패 셋 (241 답 · sub3 · Opus high) + + +- 정함(브레인): 302_1 · 302_4 = 기기 알아채기가 window 없는 곳에서 건너뛰게(제품 한 곳) · 254_1 = 옮긴 파일에서 찾게 · 52_6 = 마스터 실제 기본값에 안 기대게(마스터 값 = 사용자 편집 4baf49ba4) · 근거 6장. +- [x] 394-1 셋 고침 — 확인: test_302_1 · 302_4 · 254_1 · 52_6 통과. + - 검증완료: 넷 31 통과 · typecheck 통과 · 0fef92545(검증 대기). +- [x] 394-2 test_b05_min_cover_guard — 367-3(84876b747)이 applyEdits 가드를 `return false;` 로 바꿈(막히면 자유지정 열린 채) · 시험 글은 옛 `return;` → 시험 기대 고침(부르는 곳 한 곳 판정 그대로). 확인: 시험 통과. 검증완료(10 통과 · 검증 대기) +- [x] 394-3 test_152_3_chute_cut::test_성토만인_측점은_그대로 — pipeBase bands3d 2 → 1(메인 · 371 벽 성토 이음 무렵 추정) · 까닭 가림: 의도된 바뀜이면 시험 기대 고침(까닭 한 줄) · 흠이면 제품 고침. 확인: 시험 통과 + 까닭 한 줄. + - 까닭: 6ba26ee61(371-1 다단 사이 시작 = 윗단 발끝) — 배관 85.052 아랫단 0.5 m 내려가 끝 구간 묻힘 → 성토 + 3도 절토(의도된 바뀜 · 377-3 같은 갈래) · 시험 기대만 고침(제품 고침 없음). + - 검증완료: 그 앞 커밋 트리 helper = fill · fill 2 · 2 / 371-1 트리부터 fill · cut 2 · 1(까닭 확정) · 152_3 · 371_2 · wall_shape_unified · 139_4 · 띠 시험 합 42 통과 · typecheck 통과 · d1c863c05(검증 대기). + +## 396. 요구 242 마무리 — 합치기 · 브레인 화면 검증 · 보고 (브레인) + + +- [x] 396-1 합치기 · 서버 묶음 · 고친 대상 시험 · typecheck. +- [x] 396-2 브레인 사용자처럼 브라우저 검증(242-1~17 · 한 페이지 전환 · 보안) — 흠은 창에 고침 → 다시 잼. +- [x] 396-3 보고(요구별 결과 · 수치 · 정함 목록 · 388-4 · 395 결정 거리). +- 검증완료(396) — 합침 · 서버 묶음 다섯 · typecheck 0 · 고친 대상 시험 95 파일 585 통과(옛 실패 302_1 · 302_4 · 254_1 · 52_6 · min_cover · drainage_side · 152_3 모두 통과) · 브레인 화면 V1~V19 + 덧 요구 243~247 통과 · 흠 하나(390-4 스냅 글) 고친 뒤 다시 잼 · 로그아웃 보안 확인 · 남은 결정 = 388-4 · 395-1 · 검증 대기. + +## 397. B06 횡단 그래프 Ctrl+휠 확대 · 축소 (요구 245 · sub6 · Opus high) + + +- 정함(브레인): B06 횡단 카드(· 같은 카드를 쓰는 상세 모달) 그래프 위 Ctrl+휠 = 마우스 자리 중심 확대 · 축소(지금 + − ⤢ 단추와 같은 줌 상태 · 같은 한도) · Ctrl 없는 휠 = 페이지 스크롤 그대로 · 트랙패드 · 손가락 벌림도 같은 확대 · 브라우저 확대 막음(그래프 위만) · B05 우측 판(읽기 전용 · 393-3)은 빼도 됨. +- [x] 397-1 Ctrl+휠 줌 — 확인: 시험(줌 상태 · 마우스 중심 · Ctrl 없는 휠 = 스크롤) + 화면(밝음 · 어두움 · 단추와 섞어 씀 · ⤢ 맞춤 복귀). +- 검증완료(sub6) — 시험 63 통과(397 · 공용 줌 쓰는 B06 상세 · B08 · 입력 방향) · typecheck · 화면(검증_sub6 · Ctrl+휠 = 마우스 자리 고정 1.15배 · 브라우저 확대 막음 · 맨 휠 = 안 막음 · 줌 그대로 · 핀치 · + 단추와 이어짐 · ⤢ 원배율 · 상세 모달 Ctrl+휠 · 밝음 · 어두움 · 되돌림) · 15092ee2b · 검증 대기. + +## 398. B05 평면 — 교점 옮기면 좌측 패널 열림 · 반지름 · 곡선 길이 바꿔도 그대로 (요구 248 · 249) + + +- 정함(브레인): 좌측 패널 저절로 펴기(09-04 「바깥에서 고르면 좌측 패널도」)는 사용자가 직접 고를 때만 · 노선 · 묶음이 다시 돌며 고름을 다시 칠할 때는 안 폄. 반지름 · 곡선 길이 = 꺾임점 창에서 넣으면 그 값으로 곡선이 바뀜(측점 스냅 켬이면 맞춤 뒤 값 · 못 지키면 상태줄 까닭). +- [x] 398-1 교점 끌기 · 방향키 · 노선 고침 뒤 좌측 패널 안 열림(고른 관 · 구조물 있어도) — sub7 · 확인: 시험 + 화면(접힌 좌측 패널 · 관 고른 채 교점 끌기). + - 뿌리 = 노선 고침 뒤 다시 칠하기(관 따라가기 · 배수유역 다시 나눔 응답 · 고름 되살림)가 폼을 다시 실으며 펴기를 부름 · 고침 = 「사용자 고름」 한 칸(`design_user_pick` · 진짜 누름 안 + 묶음 차례 없음)을 펴기 한 곳(`design_shared` onReveal)이 봄. + - 검증완료(sub7) — 시험 274 통과(새 test_398_1 · test_365 · 384_2 · 382-2 · 구조물 패널 · 233 · 116 등) · typecheck · 화면(검증_sub7 · 좌측 패널 접고 관 고른 채 교점 끌기 · 관 256→257 m 따라감 · 방향키 · 곡선 삭제 · 되돌리기 · Ctrl+Z · 보기 전환(초안 저장 안 함) = 펴짐 0 · 종단 알약 · 3D 측점 · 횡단 보기 알약 · 우클릭 추가 = 펴짐 1 · 밝음 · 어두움 · 세션 되돌림 차이 0) · 평면 눈금 · 마름모는 원래 좌측 폼을 안 엶(그대로) · 017080108 — 검증 대기. +- [x] 398-2 반지름 · 곡선 길이 입력이 곡선에 반영 — sub1 · 확인: 까닭 + 시험 + 화면(스냅 끔 · 켬 · 「고정」 켬 · 끔). + - 검증완료(sub1) — 까닭 = 접선은 앞뒤 직선 짧은 쪽 절반까지(서버 짝 같은 규칙)라 큰 R 이 조용히 눌림 + 창 칸은 넣은 값 그대로 보임 · 고침 = 칸은 그린 값 · 눌리면 상태줄 「반지름 60m → 23.2m(앞뒤 직선이 짧아 접선 자리 모자람)」 · 시험 12 통과(새 test_398_2) · typecheck · 화면(검증_sub1 · 진짜 마우스 · 18번째 꺾임점 스냅 끔 R 40 · 60 · L 18 · 25 그대로 · 스냅 켬 R 40 · 60 그대로 · L 17.85 · 25.07 · MC 600 · 16번째 꺾임점 40 · 60 → 23.2 · 빈 값 = 자동 12 · 길이 고정 켬 = 이웃 IP 3 m 옮겨도 L 25.07 · 끔 = 22.89 · 밝음 · 어두움 · 보기 · 접힘 되돌림 · 저장 노선 그대로) · 054f716f0 · 156ee5e79 — 검증 대기. +- [x] 398-3 어두움 테마 꺾임점 창 [곡선 삭제] · [✕] 단추 흐림(sub1 보고 · 옛 테마) — sub2 · 확인: 대비 4.5 이상 · 밝음 그대로. 검증완료(sub2 · 코드 변경 없음 — 어두움에서 새로 열면 글 · 테두리 b99aff / 바탕 251f38 = 대비 6.85 · 밝음 16.65 · 공용 토큰 그대로 · 흐림 원인 = 화면에서 테마를 바꾼 직후 단추 색 전환(0.12초)이 멈춘 상태에서만 옛 색(대비 1.06) · 새로 열면 정상 · 단추 둘 다 누를 수 있는 상태 · 되돌림 · 검증 대기) +- [x] 398-4 안 함 — 사용자 251-2: 곡선 합치기는 추천 초기노선에서만 → 모든 노선에 걸리는 접선 규칙은 그대로(406 = 접선 규칙 없이). +- 검증완료(398) — 398-1(sub7 017080108 · 접은 좌측 패널 교점 끌기 · 방향키 · 곡선 삭제 · 되돌리기 · 전환 = 펴짐 0 · 알약 · 3D · 우클릭 = 1) · 398-2(sub1 054f716f0 · 156ee5e79 · 넉넉한 자리 넣은 값 그대로 · 좁은 자리 그린 값 + 까닭) · 398-3 흠 아님(대비 6.85 · ORCA 색 전환 멈춤) · 메인 합침 · typecheck · 묶음 · 시험 150 통과 · 남은 결정 398-4 · 검증 대기. + +## 399. B05 평면 구조물 측점 마커 · 1 m 옮김 · 정보 창 · 법선 (요구 250-2 · sub3 · Opus high) + + +- 정함(브레인): 구조물(관 · 구조물 · 사토장 등 측점 가진 것) 측점 = 평면 노선 위 마커(일반 측점 눈금과 다른 모양 · 스냅과 무관) · 노선 바뀌면 지금 규칙대로 좌표(x · y) 따라가고 누가거리 = 정수 m 로 다시 매김(사용자 말 「측점번호 유지 · 소수점 때문에 미세 이동」) · 마커 끌기 · 방향키 = 노선 따라 1 m 씩(정수 m) · 마커 고름 = 종단 아래 알약 정보 창과 같은 창 + 그 측점 횡단 법선(좌우 20 m · 391 과 같은 선) · 옮긴 값 = 초안(캐시) · [저장] 에서 정본. +- [x] 399-1 마커 그리기 · 고름 · 정보 창 · 법선 — 확인: 시험 + 화면(관 · 구조물 · 밝음/어두움). +- [x] 399-2 끌기 · 방향키 1 m 옮김 · 종단 · 횡단 따라감 — 확인: 시험(정수 m · 노선 밖 안 감) + 화면(옮긴 뒤 종단 알약 · B06 카드 측점). +- 검증완료(sub3) — 시험 test_399 11 · 관련 60 통과 · typecheck 0 · 화면(검증_sub3 · 마커 12 = 알약 12 · 색 차례 같음 · 세월교 1 · 배관 1 고름 = 정보 창(알약 벌룬 같은 줄) · 좌우 20 m 법선 · 좌측 목록 · 종단 알약 강조 · 알약 고름 → 평면 마커 · 끌기 +3 m(4+9 → 4+12 · 10+19 → 11+2) · 방향키 연달아 2 = +2 m · 종단 알약 4+14 · 오른쪽 횡단 4+14 · B06 카드 4+14(94.0 m) · 되돌리기 = 관 옮김 되돌림 · 어두움 · 저장 안 함 · 처음 자리 12 곳 · 노선 초안 없음) · 이 프로젝트는 관 · 세월교만(손 구조물 없음 · 구조물 길 = 시험) · 교각점 12 px 안 마커는 교각점이 먼저 집힘(정한 차례) · c3efa6dd7 · 9d72d15cf — 검증 대기. + +## 400. 평면 고친 뒤 종단 편집 이어받기 (요구 250-2둘째 · sub6 · Opus high) + + +- 정함(브레인): 평면 고침 = 바뀐 구간만 종단 다시 · 안 바뀐 구간은 사용자 종단(직선화 · 자유지정 · 쉬프트 · ▲▼ 결과 = 계획고 VIP 와 그 편집)을 새 누가거리로 옮김(옛 노선 · 새 노선을 x · y 로 맞대어 같은 선 구간 찾기 · 옛 VIP 를 새 선에 투영) · 바뀐 구간 = 자동 설계로 다시 · 양 끝은 이어받은 VIP 에 맞물림(기울기 · 종단 곡선 규칙) · 평면 되돌리면 종단도 되돌림 · 서버 [저장] 도 같은 이월(파이썬 · TS 짝 또는 ② 서버 Node). +- [x] 400-1 지금 흐름 · 이월 설계 — 확인: 분석 한 장(tmp) + 시험 설계. + - 검증완료(sub6) — 끊김 셋 = 측점 스냅이 뒤 교점을 밀어 1 mm 정점 비교로 뒤쪽 전부 「바뀐 구간」 · 민 키가 측점 밖이라 [저장] 이 버림 · 걸음마다 옮겨 걸음 수 따라 다름 · 같은 자리 = 옆 1.0 m(브레인 정함 10-17) · tmp/분석_400.md. +- [x] 400-2 이월 구현 — 확인: 시험(먼 곳 교점 하나 옮김 = 바뀐 구간 밖 VIP 그대로 · 바뀐 구간만 다시) + 화면(종단 직선화 · 자유지정 뒤 교점 옮김). + - 검증완료(sub6) — 시험 test_400 19 · 344_2 · 349_0v · 346_3 · 365 · 346 · 349_0 · 356 · 367 · 368 통과(346_3 화면 도우미 6 오류 = 390-5 Apply 변경 뒤 도우미 미갱신 · 400 무관) · 스냅 켠 노선 옛 규칙 = 전 구간 다시 · 새 = 55 측점 중 39 이어받음 · typecheck · 묶음 · 화면(검증_sub6 · 진짜 마우스 · ▲ · 직선화 20~120 m · 자유지정 160~220 m · 500~540 m ▲ 뒤 18+0 교점 끌기 = 앞 0~14+0 계획고 그대로 · 뒤 460~580 m 같은 자리 계획고 차 0.04 m 안(길이 −2.6 m) · Ctrl+Z = 종단까지 되돌림 · 저장 안 하고 버림 = 저장 종단 그대로) · a1097653e — 검증 대기. + - 정함(브레인 · sub6 물음): 스냅 켠 노선은 교점 하나 고쳐도 뒤 교점이 MC 맞춤으로 옆으로 밀림 → 같은 자리 판정 = 옆 어긋남 1.0 m 까지(높이 = 옛 계획고 · 지반 = 새 것) · 상수 한 칸(바꿀 수 있음). + +## 401. 평면 가운데 단추 팬 튐 (요구 250-3 · sub1 · Opus high) + + +- [x] 401-1 까닭 · 고침 — 확인: 시험 + 화면(가운데 단추 끌기 여러 번 · 끄는 중 바깥 나갔다 옴 · 휠 · Ctrl+휠 섞음 = 튐 0). + - 까닭: 팬이 누를 때 쥔 offset 에 「처음부터 민 만큼」을 덮어씀 — 끄는 중 휠(buttons 4 로 들어옴) · Ctrl+휠 회전 · 둘째 손가락이 바꾼 화면을 옛 값이 덮어 튐. 고침 = `_RouteEdit_Input` 걸음마다 지금 화면에 더함 · 시작 포인터만 · buttons 놓침 · 캡처 잃음에 팬 끝. + - 검증완료: 시험 6(옛 코드 휠 27px · 둘째 손가락 224px · 캡처 잃음 90px → 0) · typecheck · 5174 검증_sub1 진짜 가운데 단추 끌기 4걸음 · 휠 섞음 · 회전 15° · 끄는 중 Ctrl+휠 = 그림 어긋남 ≤1.4px(화소 칸) · 왼 패널에서 놓고 들어옴 = 그림 그대로 · 보던 화면 기억 지움(노선 맞춤 · 0°)(검증 대기). +- [x] 401-2 test_346_3_route_save_screen 6 오류(390-5 Apply 바뀐 뒤 시험 도우미 미갱신 · sub6 보고) — sub1 · 확인: 시험 통과. + - 검증완료: 까닭 = 도우미가 옛 `stationSnap()` 을 넘김(제품은 `snap()` 켬끔 · 간격 한 벌 — 맞음) · 도우미 맞춤 + 초안 stationSnapStep 칸 확인 · test_346_3 · test_390_4 · test_390_5 47 통과 · typecheck(검증 대기). +- [x] 401-3 평면 곡선 R 글이 도구줄 [되돌리기] 단추를 덮어 누름이 안 감(sub6 보고 · Ctrl+Z 는 됨) — sub8 · 확인: 화면 단추 누름 · 글은 도구줄 아래로 · 누름 안 가로챔. + - 까닭: R 창(`.b05-routeedit__label`) · 등고선 자물쇠 층 3 > 도구줄 · 횡단 판 층 2. 고침 = 둘 다 층 1(지도 위 표지 층). + - 검증완료 — 시험 16 통과 · 5183 검증_sub8 곡선 지움 → R 창을 [되돌리기] 위로 끎(겹침) · 그 자리 맨 위 = 단추 · 진짜 누름 = 「되돌렸습니다 · 곡선 26곳」 · 저장 안 함 · 종단 판 접힘 되돌림(검증 대기). + +## 402. 프로젝트 다시 만들기 — 하나 파일 입력 · 전처리 시험 → 나머지 복제(같은 이름) (요구 250-4 · sub5 · Opus high) + + +- 정함(브레인): 지우기 전 백업(DB 프로젝트 행 · 자식 표 · storage 폴더 통째 · 되살리는 길 시험) · 원본 입력 파일 = 지금 프로젝트의 B03 원본 · 새 프로젝트 하나 = 화면 길(B02 등록 → B03 파일 입력 → B04 전처리 · 완료 메일 = 사용자 요청이라 감수) · 문제 없으면 나머지 = 복제 도구(db_management/tools_clone_project.py · storage 복사)로 지금 이름 · 주인 · 참여자 그대로 · 옛/새 id 표(OWNERS.md 검증_subN 갱신 거리 = 사용자에게 알림) · 지우기는 다른 창 화면 확인이 끝난 뒤 브레인 신호로. +- [x] 402-1 목록 · 백업 · 되살리기 시험 · 복제 도구 시험(지우기 없음) — 확인: 표 + 백업 크기 · 시험 복제 하나 열림. + - 검증완료(402-1 · sub5): 16 개 · 모두 캐미팩토리 · B03 원본 한 벌(용화.las 외 8) · 백업 C:/Aislo_backup/1017_projects(50 GB · storage 16 + db_projects.json 21 표) · 되살리기 왕복 시험 · 시험 복제 둘 열림 뒤 지움 · 도구 tools_project_backup.py 새로 · 복제 도구 참여자 · 지형층 · --owner · --members. + - 정함(브레인 · ⚠ 데스크탑 임시 배포 같은 DB · storage PC 마다 따로 · 데스크탑 D: 에도 같은 16 폴더): 데스크탑 옛 폴더는 지우지 않음(검증 사용자 작업 보존 = 백업) · 새 프로젝트 storage 는 랩탑에서 만든 바탕 폴더 하나를 Tailscale 파일 보내기(Taildrop)로 데스크탑에 보내 데스크탑에서 storage 만 복제(새 id 15 + 바탕) · 지우기는 다른 창(sub3 · sub6 · sub4) 끝난 뒤. +- [x] 402-1b storage 만 복제 길(복제 도구 --storage-only · 데스크탑에서 돌릴 차례) · Taildrop 작은 파일 시험(랩탑 → 데스크탑) · 데스크탑 D: 남은 자리 — 확인: 작은 파일 받음 · 시험 폴더 복제 열림. + - 검증완료(402-1b · sub5): --storage-only(283 파일 md5 = 통째 복제) · Taildrop 100 MB 12.8 초(3 GB ≈ 7 분 · tar 하나 · 데스크탑 Downloads 로 받음) · 데스크탑 D: 1615 GB 남음 · sub_desktop_1 storage = 임시 배포 storage 정션 · 데스크탑 돌리기 = 깃 싱크 뒤. + - 검증완료 — --storage-only 다시 만든 폴더 283 파일 md5 통째 복제와 같음 · B05 API 열림 · Taildrop 100 MB 12.8 초 MD5 같음(데스크탑 Downloads 에 저절로) · D: 1615 GB 남음 · tmp/402_데스크탑.md + - 검증완료 — 백업 C:/Aislo_backup/1017_projects 50 GB · 되살리기 왕복 B05 응답 같음 · 시험 복제 B05 열림 뒤 지움 · tmp/402_목록.md · tmp/402_계획.md +- [x] 402-2 (브레인 신호 뒤) 지움 → 새 프로젝트 파일 입력 · 전처리 → 확인 — 확인: 전처리 단계 모두 끝 · B05 열림. + - 검증완료 — 옛 16 지움(DB 연쇄 + storage · 직전 덤프 db_projects_final.json · storage 백업 /MIR 같음) · 새 검증_랩탑메인 화면 길(B02 → B03 9 파일 업로드 46 s → 전처리 4 min → 자동 체인 B05·B06 1 min) · 단계 0·1 COMPLETE · 2·3 IN_PROGRESS(체인 설계상 「사용자 검토 대기」 · 옛 16 중 15 와 같음) · B05 노선 1080.2 m · 구조물 1(17+11 배관 = 세류선 교차 하나) · B06 횡단 57 · 오류 로그 없음 · tmp/402_new_b05.png · tmp/402_new_b06.png +- [x] 402-3 복제로 나머지 같은 이름 — 확인: 목록 이름 · 주인 같음 · 각 B05 열림 · 옛/새 id 표. + - 검증완료 — 15 복제 · 이름 · 주인 · 참여자 옛과 같음 · 랩탑 8007 · 데스크탑 8000 B05 API 각 64/64 · storage 는 Synology Drive 로 랩탑 ↔ 데스크탑 동기화(데스크탑 16 폴더 296 파일 · 바이트 합 같음 · 옛 데스크탑 폴더도 동기화로 지워짐 = 랩탑 백업 + Synology 휴지통) · tmp/402_id표.md + +## 403. 평면 곡선 없는 교각점(삼각) 각도 표기 (요구 250-5 · sub8 · Opus high) + + +- [x] 403-1 삼각 자리에도 내각 · 교각 글(곡선 있는 자리와 같은 꼴) — 확인: 시험 + 화면. + - 검증완료 — 시험 12 통과 · typecheck · 화면(검증_sub8 21번째 꺾임점 곡선 삭제 → 「내각 128° · 곡선 없음」 한 줄 · 곡선 있을 때 128° 같음 · 밝음/어두움) · 저장 안 함 · 검증 대기. + +## 404. R 곡선 합치기 — 의도 분석 · 제안 (요구 250-6 · sub4 · Opus high · 코드 X) + + +- 사용자 의도: 크게 하나의 곡선으로 표현할 수 있는 곳은 하나로 · 곡선 사이 직선 사라짐 · 최적 경로를 찾되 가능하면 노선 단순화. +- [x] 404-1 제안(갈래 · 수치 · 전후 그림 · 지식DB 근거 · 398-4 접선 규칙과 관계) — 확인: 제안 글(tmp) · 브레인이 docs 로. +- 검증완료(404) — sub4 `C:\Aislo_wt\sub_laptop_4\tmp\제안_404.md` · 그림 `tmp/제안_404_<갈래>.png` 다섯 · 권장 ①b(같은 쪽 이웃 합치기 + 398-4 접선 규칙) = 곡선 평균 32 → 21 · 같은 쪽 짧은 직선 15~17 → 3~7 · 기울기 · 토공 그대로 · ②단순화 · ③꺾임 벌점 탈락(기울기 망가짐 · 변화 없음) · 남은 결정 = 398-4 허락 · 측점 못 놓을 때 합치기 풀기 · 이탈 4 m · S자 직선 남김 · 검증 대기. + +## 405. 요구 250 마무리 — 전역 싱크 · 합치기 · 브레인 화면 검증(새 프로젝트) · 아티팩트 (브레인) + + +- [x] 405-1 전역 깃 싱크(작업 전). +- [x] 405-2 합치기 · 묶음 · 시험 · typecheck. +- [x] 405-3 브레인 화면 검증(399 · 400 · 401 · 403 · 새 프로젝트 전처리 · 복제) · 아티팩트 보고(242~250 · 결정 거리). +- 검증완료(405) — 전역 싱크(열세 폴더 614f12bb8) · 합침 · 묶음 다섯 · typecheck 0 · 시험 108 파일 694 통과 · 브레인 화면(옛 검증_브레인232 V1~V19 · 243~247 · 새 검증_브레인232 B05 · 마커 · 곡선 창) · 프로젝트 16 다시 만듦(랩탑 · 데스크탑 B05 16/16) · 아티팩트 https://claude.ai/artifact/G355tzL2xESFmk2z928ecz · 남은 결정 = 388-4 · 398-4 · 404(①b 결정 넷) · OWNERS.md id 갱신(사용자) · 검증 대기. + +## 406. R 곡선 합치기 — 추천 초기노선 (요구 251-2 · 404 ① · sub4 · Opus high) — (일부 · 남은 줄은 PLAN.md) + +- [x] 406-1 합치기 단계(Pool `_trace` 뒤 · 측점 맞춤 앞 · 새 파일 `B05_Profile_Engine_RouteInitial_Merge.py`) — 확인: 새 시험(같은 쪽 쌍 합침 · S자 안 합침 · 기울기 · 복도 · 계류 막힘). +- [x] 406-2 거리 한도 걷기(Radius `ROUTE_RECOMMEND_MAX_GAP_M` · Station `ROUTE_STATION_SNAP_MAX_GAP_M` → 직접 잼) · MC = 일반측점 늘 놓임 · `ALGO_VERSION` 6 — 확인: test_224_4 등 고침 + 다섯 갈래 지금 대비 표(곡선 · 측점 밖 0 · 최대 기울기 · 토공). +- [x] 406-3 화면(검증_sub4 추천 → [적용] → B05 곡선 · MC 측점 · 종단 열림) — 확인: ORCA 수치. +- 검증완료(406) — sub4 · 시험 12 파일 109 통과 · 12 건너뜀(새 test_406_1 7 · 옛 test_224_4 · 351_2 · 364_5 · route_initial 등 고침 없이 통과 — 이탈 한도 판은 추적 · 새 초기 노선에 그대로) · typecheck 0 · 검증_sub4 v5 → v6: gradeline · earthwork · gentle 측점 밖 0 · 기울기 위반 5/4/4 → 1 · 같은 쪽 짧은 직선 15/17/14 → 8 · 최대 기울기 19.3/19.7/17.5 → 17.6 · 절성토 ±1 % · 곡선 30/38/33 → 33 · weighted 곡선 35 → 26 · 측점 밖 1 → 5 · ORCA 5179 기울기 최소 [적용] = 계획노선 1167.4 m · 곡선 33 · MC 33 곳 모두 서로 다른 일반측점 · 최소 R 12.35 · 종단 0+0~58+7 열림 · 오류 없음 → 적용 전으로 되돌림(DB 6표 · 파일 대조 같음) · 남은 물음 = weighted 측점 밖 5 · 세 갈래 같은 선(후보 하나) · 모달 「6m 안에서 밀고」 설명 · 검증 대기. +- [x] 406-4 v6 남은 것(sub4 보고 · 표 sub4 `tmp/406_수치.md`) — 정함(브레인): ① 합칠 때 그 곡선 MC 를 기울기 지키며 측점에 놓을 수 있어야 합침(합친 뒤 풀기 아님 · weighted 측점 밖 ≤ v5) ② gradeline · earthwork · gentle 세 갈래가 같은 선(후보 하나만 남음) — v5 와 다른 까닭 찾아 v6 탓이면 갈래마다 다른 선 되살림 ③ 곡선 수가 덜 줄어든 까닭(합치기를 막은 검사별 개수 · 삼각 교점이 곡선으로 바뀐 수) 보고 ④ 추천 창 설명 「교각점을 6m 안에서 밀고」 고침 · 셈 30 → 66 s 는 기록만(기능 먼저) — sub4 · 확인: 시험 + 다섯 갈래 표 다시. +- 검증완료(406-4) — sub4 · 커밋 28e4b0eaf · ALGO_VERSION 7 · ① 합칠 때 측점 놓기 잼(합친 곡선은 IP 밀어 놓은 꼴까지 잼 통과 · 놓을 수 없는 쌍 54 은 처음부터 안 합침) + 측점 맞춤이 합친 꼴 먼저 판에 측점 밖 생기면 옛 차례 판과 견줘 적은 쪽 → 다섯 갈래 측점 밖 ≤ v5(weighted 5 → 1) ② 세 갈래 같은 선 = 거름 규칙(기준 길보다 못 지킨 곳 많으면 뺌) · v6 은 기준 길이 5 → 1 로 좋아져 나머지(기울기 위반 2~7) 탈락 — 규칙 그대로 둠 · 기준 4 로 풀면 다른 선이나 위반 1 → 4(표) · 제약 지키는 지형(언덕 시험)은 세 갈래 다른 선 ③ 합치기 막힘(gentle 묶음 같은 쪽 쌍) 통과 20 · 토공 124 · 기울기 83 · 측점 54 · 전체 잣대 7 · 이격 6 · 복도 5 · 계류 · 최소 R 0 · 삼각 → 곡선 gradeline · earthwork 7 · gentle 3(꺾이는 곳 37 → 33) · 토공 폭 20 % 면 gentle 곡선 33 → 27 · 위반 1 → 3 — 폭 그대로 ④ 설명 글 고침 · 시험 12 파일 111 통과 · typecheck 0 · ORCA 5179 설명 새 문구 · 비중 계산 [적용] = 곡선 32 · 31 곳 측점 위 · 측점 밖 1(= v5) · 종단 0+0~54+10 열림 · 오류 없음 → 적용 전으로 되돌림(DB 6표 · 파일 대조 같음) · 셈 30 → 85 s 기록 · 검증 대기. + +## 407. 곡선 측점 — MC 에 측점 없으면 더함 (요구 252-2 · sub6 · Opus high) + + +- 정함(브레인): 224-2(스냅 켬 · 호 안 일반측점 → MC 로 옮김) 그대로 · 그 밖에 MC 에 측점이 없으면(스냅 끔 · 짧은 호) MC 자리에 곡선 측점(새 종류 `curve` · 열쇠 `curve:<누가거리>` · 이름 「No.5+7 (MC)」) · 값 = 스냅 간격 자릿수(390-5) · 일반측점 값과 같으면 안 더함 · BC · EC 안 더함 · 근거 `docs/raw/조사/2026-10-18_407_요구252_분석.md` 2장. +- [x] 407-1 측점 목록 짝(Core.py `generate_sections` ↔ `logic/B05_Profile_Sections_Stations.ts` `buildStations` · station_key 짝 · StationKind) · B06 종류 갈래 · 평면 눈금 — 확인: 거울 시험(344_3 둘) · 224_2 · 390_5 + 새 시험(스냅 끔 · 짧은 호 · 일반측점 위 MC = 안 더함). +- [x] 407-2 화면(검증_sub6 · 스냅 끔 / 켬 짧은 호 → 평면 눈금 · 종단 · B06 카드 · 오른쪽 횡단에 곡선 측점) — 확인: ORCA 수치. + - 검증완료(sub6) — 시험 381 통과 · typecheck · 화면(검증_sub6 · 저장 노선 = MC 모두 20 m 배수 → 곡선 측점 0 · R 12→17 스냅 끔 = 곡선 측점 17(19+17 (MC) 397.0m 카드 · 확폭 2.00) · 스냅 켬 0.1 · R 25 = 짧은 호 셋 398.4 · 438.4 · 478.4 · 평면 「21+18.4 (MC)」 · 오른쪽 횡단 438.4 · 밝음/어두움 · 되돌림) · fe893cfb8 · 서버 묶음 다시 지음 필요(검증 대기) + +- [x] 407-3 구조물을 MC 위에 놓았다 빼면 노선 다시 저장 전까지 서버 종단에서 그 곡선 측점 빠짐(sub6 보고) — 정함(브레인): 구조물 저장 · 지움 때도 서버 측점 목록이 곡선 측점을 다시 셈(노선 저장 기다리지 않음) · sub6 · 확인: 시험(놓음 → 뺌 → 서버 종단 곡선 측점 있음). +- [x] 407-4 가까운 측점(1.6 m)과 종단 측점 이름 겹침 — 정함(브레인): 겹치면 비켜 그림(지우지 않음) · sub6 · 확인: 화면(겹친 두 이름 다 읽힘) + 시험. + - 검증완료(sub6) — 시험 334 통과(새 407_3 · 407_4) · typecheck · 407-3 = [저장] 횡단 차례 측점 맞춤이 곡선 측점 어긋남도 셈 → 놓음 = 107 구조물 측점 하나 · 뺌 = 107 곡선 측점 되살아남 · 407-4 = 화면(검증_sub6 · 스냅 0.1 · R 25 → 「19+16 (MC)」 제자리 · 「20+0」 한 단 위(13 px) 등 일곱 쌍 · 밝음/어두움 둘 다 읽힘 · 되돌림) · 5269859ee · e8f2ae02d · 98755730e · 서버 묶음 다시 지음 필요(검증 대기) + +- [x] 407-5 B05 종단 아래 표(계획고 · 지반고 · 측점 행)도 가까운 측점끼리 글 겹침(sub6 보고) — 정함(브레인): 겹치는 칸만 비켜 쓰거나 세로로(지우지 않음 · 407-4 와 같은 함수 쓰면 좋음) · sub6 · 확인: 시험 + 화면(1.6 m 쌍 둘 다 읽힘). + - 검증완료(sub6) — 시험 55 통과(test_407_4 표 칸 세우기 더함) · typecheck · 화면(검증_sub6 · 스냅 0.1 · R 25 → 지반고 행 세운 칸 12 = 겹친 여섯 쌍만 · 글 겹침 0 · 확대 두 단 · 되돌림 같음 · 밝음/어두움 둘 다 읽힘 · 되돌림) · B06 같은 표 없음 · 501d9ca90 · dfb3cba24(검증 대기) + +## 408. R 바꿈 뒤 뒤쪽 측점 맞춤 — 있음 · 보고 · 시험 (요구 252-3 · sub1 · Opus high) + + +- 정함(브레인): 반지름 · 곡선 길이 입력 = 교점 끌기와 같은 `fitCurveStations(k-1 …)` 로 뒤쪽 곡선까지 이미 맞춤(분석 3장) → 고칠 것 = 상태줄 「함께 밀린 교점 N곳 · 못 맞춘 곡선 No.…」(KeyNudge 재사용) · 뒤쪽 MC 시험 · 접선 규칙 그대로(251). +- [x] 408-1 R · 곡선 길이 입력 뒤 상태줄 보고 + 시험(R 키운 뒤 뒤쪽 MC 측점 위 · 측점 밖 개수 안 늘어남) — 확인: test_398_2 · 366_3 · 새 시험 + 화면(스냅 켬 · R 바꿈 → 뒤 곡선 MC 눈금). + - 검증완료 — 시험 72 통과 · typecheck · 검증_sub1 R 12→30 = 「함께 밀린 교점 7곳」 · 곡선 25 MC 모두 측점 위(최대 0.009 m) · 곡선 길이 = 「못 맞춘 곡선 No.38+19」 · 스냅 끔 = 보고 없음 · 뒤 MC 740.6~1001.2 어긋남 · 빈 값 · 되돌리기 · 어두움 · 저장 안 함 · 검증 대기. + +- [x] 408-2 창 나눔(종단 판 열림) 때 평면 상태줄이 종단 표 밑에 깔림(sub1 보고 · 옛 배치 흠) — 정함(브레인): 고침 = 평면 상태줄이 늘 보이게 · sub1 · 확인: 화면(창 나눔 · 종단 판 열고 R 바꿈 → 상태줄 보임) + 시험. + - 검증완료 — 시험 112 통과(새 test_408_2 · 345_5c 고쳐 씀) · typecheck · 검증_sub1 판 열림 = 상태 글판 아래 418 < 판 위 430 · 접힘 = 제자리(1065 < 1077) · 창 분할 = 제자리 · 되돌아옴 = 다시 위 · R 12→30 「함께 밀린 교점 8곳」 보임 · 어두움 · 저장 안 함 · 검증 대기. + +- [x] 408-3 잰 값 창(평면 오른쪽 아래)도 종단 판에 가려짐(sub1 보고) — 정함(브레인): 408-2 와 같은 올림 · sub1 · 확인: 시험 + 화면(판 열고 재기 → 창 보임). + - 검증완료 — 같이 올림 = 잰 값 창 · 오른쪽 횡단 판(손잡이 530→206 · 아래 반) · 시험 115 통과 · 검증_sub1 판 열림 = 잰 값 창 368~418 · 횡단 판 58~418 < 판 위 430 · 접힘 · 창 분할 = 제자리 · 결합 = 다시 위 · 어두움 · 되돌림 · 저장 안 함 · 검증 대기. + +- [x] 408-4 오른쪽 횡단 판이 넓게 열리면 상태 글판 · 잰 값 창이 옆으로 겹침(sub1 보고 · 옛 흠) — 정함(브레인): 글판 · 창이 횡단 판 왼쪽 안에서 끝남(겹치지 않음) · sub1 · 확인: 시험 + 화면(판 넓힘 · 좁힘 · 접힘). + - 검증완료 — 빈 폭 반씩 · 반 200 px 아래 = 잰 값 창을 상태 글판 위로 쌓음 · 시험 119 통과 · 검증_sub1 횡단 판 460 = 글판 332~654 · 창 666~988 · 판 1020~ · 891 넓힘 = 창 315~365 위 · 글판 373~418 · 둘 다 ~589 < 판 621 · 312 좁힘 · 판 접힘 · 종단 접힘 · 창 분할 = 겹침 0 · 어두움 · 판 폭 460 · 닫힘 되돌림 · 저장 안 함 · 검증 대기. + +## 409. 구조물 마커 맨 위 · 다른 곳 누르면 고름 풀림 (요구 252-4 · sub3 · Opus high) + + +- 정함(브레인): 마커 = 평면 그림 맨 마지막 · 누름 · 올림 · 커서 마커 먼저(측정 · Shift 다음) · 마커 누르면 교점 고름 풂 · 마커 아닌 곳 누름 · Esc = 마커 고름 풂 · 오른쪽 판은 마지막 측점 그대로 · 분석 4장. +- [x] 409-1 그리기 · 누름 차례 · 고름 풀기 — 확인: test_399 차례 고쳐 씀 + 새 시험 + 화면(교점 겹친 마커 누름 · 빈 곳 · 교점 · 눈금 누름 = 풀림 · Esc). + - 검증완료(sub3) — 시험 24 + 이웃 108 통과 · typecheck · 화면(검증_sub3 · 교점 13 고른 채 11 px 겹친 19+2 마커 누름 = 마커 고름 · 곡선 판 닫힘 · 빈 곳 · 교점 · 16+0 눈금 · Esc = 풀림 · 오른쪽 판 그대로 · 밝음/어두움 · 보기 · 관 자리 되돌림 · 저장 안 함) · 24fe93ba6(검증 대기). + +- [x] 409-2 마커 고름 풀면 좌측 구조물 목록 줄 강조 · 그 구조물 폼도 풂(sub3 물음) — 정함(브레인): 고름은 하나 → 목록 강조 · 폼 함께 풂 · 좌측 패널 접힘 · 펼침 상태는 그대로 · sub3 · 확인: 시험 + 화면(마커 고름 → 빈 곳 · Esc → 목록 강조 · 폼 없음 · 패널 접힘 그대로). + - 검증완료(sub3) — 시험 97 통과(409 · 399 · 411-A · 398-1 · 233-1~4 · 270-1 · 이웃) · typecheck · 화면(검증_sub3 · 구조물 배치 접은 채 · 편 채 둘 · 17+16 · 19+2 마커 고름 = 줄 is-selected · 폼 A/배관 → 빈 곳 · Esc = 줄 강조 0 · 폼 「선택」 · 접힘 · 펼침 그대로 · 오른쪽 판 그대로 · 밝음/어두움 · 되돌림 · 저장 안 함) · f91c59a2f(검증 대기). + +## 410. 구조물 · 관 자리 = 등고선 좌표 지킴 (요구 252-5 · sub7 · Opus high) + + +- 정함(브레인): 자리 기준 = 놓은(마커로 옮긴) x · y · 노선 바뀌면 새 노선에 투영해 누가거리 다시 매김(정수 m) · 마커 옮김 = 새 x · y 적음 · 배수 편집기는 따라간 값 받아 씀 · 관 초안에 x · y · 사토장 · 토취장 지금처럼 · 서버 저장 같은 규칙(짝 · 거울) · 분석 5장. +- [x] 410-1 마커 옮김 x · y · 배수 편집기 따라감 받음 · 저장 짝 — 확인: 시험(교점 옮김 · R 바꿈 뒤 관 · 구조물 x · y 그대로 · 누가거리 다시 매김 · 옮긴 구조물 안 튐) + 화면. + - 검증완료 — 좌표 낡음 판정(좌표가 누가거리를 안 낳으면 노선 위로 · TS placeOnLine ↔ 파이썬 fill 짝) · 배수 편집기 id 짝 따라감 · 초안 둔 채 열기 자리 · test_410 7 · 이웃 시험 55 통과 · typecheck · 검증_sub7 교점 끌기 = 관 351→354 · 구조물 159→167 · 260→266 x · y 그대로 · 마커로 167→246 옮긴 뒤 교점 끌기 = 250 · 새 x · y(옛 자리로 안 튐) · 다시 열기 = 205 · 354 그대로 · 되돌리기 · 초안 버림 = 351 · 저장 안 함 · 세션 되돌림 · 묶음 다시 지음 필요 · 74ae3ac26(검증 대기). + +## 411. 마커 옮기면 새 측점 · 오른쪽 횡단 빔 (요구 252-6 · A sub3 · B~D sub7 · Opus high) + + +- 정함(브레인): 오른쪽 판 = 구조물 · 관 골라도 그 측점 횡단 그림 · 관 · 구조물 짝 = id(정렬 차례 짝 걷음) · B06 열쇠 = 파이프라인과 같은 규칙(서버 관 id 도 `pipe:`) · 분석 6장. +- [x] 411-A 오른쪽 판 구조물 · 관 고름 횡단(Cross.ts `watching.structure` 걷음 · 옮긴 뒤 다시 고름) — sub3 · 확인: 시험 + 화면. + - 검증완료(sub3) — test_411_a 7 통과 · 화면(관 19+2 · 17+16 마커 고름 = 그 측점 횡단(집수정) · 17+16 → 17+13 끌기 = 판 17+13 · 되돌려 17+16) · 옮긴 뒤 = 측점 열쇠로 따라감(다시 고름 안 씀) · 24fe93ba6(검증 대기). +- [x] 411-B 관 id 짝 차례 → id(`shownPipes` · `movePipeId` · `followedMarks` · `followPipeReports`) · 411-D B06 열쇠 — sub7 · 확인: 시험(앞 관 지나 옮김 = 알약 · 측점 수 그대로 · id 그대로) + 화면(노선 고친 초안 · 안 고친 상태 둘 · B06 카드 계획고 0 아님). + - 검증완료 — 관 알림에 고정 id · 세션 id = 관 고정 id 표로 새 자리(placePipeIds · 헛 id 뺌) · followedMarks 같은 자리 먼저 · B06 useStationOwners 서버 관 id = pipe: · test_411_b 8 통과 · 검증_sub7 안 고친 상태 200→100(앞 관 120 지남) = 알약 5 · 측점 56 · id 그대로 · 노선 고친 초안 354→110 · 205→110 · 300→89 = 알약 5 · id 그대로 · B06 카드 4+9 계획고 863.6(0 아님) · 저장 안 함 · 세션 되돌림 · 74ae3ac26(검증 대기). + - 남은 것 — B06 `Station_Keys.ts` 관 같은 옛 측점 열쇠(`pipeIdAt` 지음 · sub6 줄)가 옛 자리에 헛 세션 id 를 지음(화면 맞춤이 빼서 지금은 무해). +- [x] 411-E B06 `Station_Keys.ts` 관 옛 측점 열쇠가 옛 자리에 헛 세션 id 를 지음(sub7 보고 · 지금 무해) — 정함(브레인): 걷음(옛 자리 id 안 지음) · sub7 · 확인: 시험(관 옮김 뒤 세션 id 표에 헛 id 0) + B06 카드 그대로. + - 검증완료 — 관 계획을 아는 동안(초안) 계획에 없는 관 측점 = pipeIdNear(안 지음) · 초안 없음 = 옛 갈래 · 화면 맞춤 때 지금 관 자리 밖 기록 정리 · test_411_b 10 · test_407 · 344_3 · 이웃 시험 136 통과 · typecheck · 검증_sub7 교점 끌기 · 208→110(앞 관 120 지남) · B06 열기 = 세션 id 표 3(관 3 · 헛 id 0) · B06 카드 5+10 계획고 861.7 · 되돌리기 두 번 = 120 · 200 · 351 · id 그대로 · 쌓인 헛 id = 열 때 정리 · 저장 안 함 · 세션 되돌림 · 274a0f892(검증 대기). + +## 412. 요구 253 검토 — 추천 기울기 · 재계산 · 십자선 둘 · 한 페이지 끊김 · R 개수 · 교차 원 · 초기화 · 탄젠시 점 (브레인 · 클로드 에이전트 넷 · 코드 X) — (일부 · 남은 줄은 PLAN.md) + +- [x] 412-1 분석(1~8장) — 확인: 에이전트 넷 file:line · 시제품 수치(저장본 재현 뒤) · 브레인 판단. + +## 413. B06 십자선 = 형상과 한 높이 + 원지반 십자선 (요구 253-2 · sub6 · Opus high) + + +- 정함(브레인): 보라 십자선 높이 = 그 측점 설계 높이(`section.design.design_elevation_m` · 형상과 같은 값 · 없을 때만 종단 표본) · 평면 초안 때 종단 표본(`design_profiles`)도 초안 종단으로 · 원지반 십자선 = `section.center_z`(없으면 가까운 표본) · 원지반 색 `--color-chart-1` · 보라보다 먼저 그려 겹치면 보라 위 · 다른 무리 class · 상세 창 확대 보정 둘 다 · B05 오른쪽 판 같은 규칙 · 근거 분석 412 5장. +- [x] 413-1 십자선 한 출처 · 원지반 십자선 — 확인: 시험(초안 때 십자선 y = 형상 높이 · 원지반 십자선 보라 앞 · 318 · 150 · 164 고쳐 씀) + 화면(평면 교점 끌기 → B06 카드 · 오른쪽 판 십자선 = 도로 형상 · ▲▼ 같이 움직임 · 원지반 십자선 · 겹침 보라 위 · 밝음 · 어두움). + - 검증완료 — 시험 318 · 150 · 164 · 346_2 · 349_0f · 349_0j · 365 통과 · typecheck · 화면(검증_sub6 · 5181): 평면 초안(중심점 ▶ 2 m) B06 카드 17 · B05 오른쪽 판 2 = 보라 십자 ↔ 도로 형상 0 px · ▲▼ +0.3 m = 둘이 4.25 px 같이 · 원지반 십자 먼저 · [상세] 확대 보정 둘 다 · 원지반고 칸 = 원지반 십자 · 밝음 · 어두움 · 세션 되돌림 · 검증 대기. + +## 414. B06 교차 원 = 절토 · 성토 바뀜 자리만 · 마우스 가까이만 + 평면 BC · EC 네모 노선 뒤 (요구 253-5 · 253-7 · sub3 · Opus high) + + +- 정함(브레인): 교차 원 = 그 쪽 도로 끝 높이 = 원지반 ±5 mm(`edgeOnGround` · `bare`)일 때만 · 평소 투명 · 마우스 가까이 · 고름 때 보임 · 누르면 지금처럼 고름 → ◀▶ 로 절토 ↔ 성토 · 평면 = 모든 곡선 BC · EC 네모를 예상노선 뒤 · 노선 앞으로(고른 곡선 BC · MC · EC 는 위 그대로 · 잡기 14 px 그대로) · 근거 분석 412 6장 · 8장. +- [x] 414-1 교차 원 — 확인: 시험(`test_370_2` 세 건 바뀜 단면으로 고쳐 씀 · 보통 단면 원 0) + 화면(양쪽 절토 측점 ◀ 로 밀어 바뀜 자리 → 가까이 원 보임 · 눌러 성토로 · 멀면 안 보임). + - 검증완료 — 시험 7 통과 · 화면 4+0 원 0 → ◀ 한 번에 바뀜 자리 원 1 · 평소 투명 · 올림 보임 · 19 px 밖 안 보임 · ◀ 성토 · ▶ 양측 절토 · ↺ 되돌림. +- [x] 414-2 BC · EC 네모 노선 뒤 — 확인: 시험(`test_381_3:26` 고쳐 씀 · 391 · 399 · 346_2 통과) + 화면(네모 위로 노선 지나감 · 손잡이 끌기 그대로). + - 검증완료 — 시험 56 통과(7 건너뜀 = 검증_sub7 없음) · 화면 노선이 네모 위로 지나감 · 네모 눌러 32번 곡선 고름. + +## 415. 한 페이지 끊김 ① — 시설 옮김이 횡단 편집 지움 · [저장] 중 옛 목록 · 두 길 측점 (분석 412 3장 H1 · H2 · M4 · sub7 · Opus high) + + +- 정함(브레인): H1 = 노선 입력이 바뀐 때만 「노선 바뀜」 이월 규칙 · 관 · 구조물만 옮기면 측점 열쇠째 편집 옮김(사면 쉬프트 · 소단 깊이 · 단면 유형 · 측구 쪽 · 포장 그대로) · H2 = [저장] 중 계산 줄 먹이기 멈춤 · 끝나면 저장 목록 다시 읽음 · M4 = 새 시설 측점 서버 미리보기(`Section_Drafts.ts:84-96`) 걷음(브라우저 계산 줄 하나) · 고치기 전 화면 재현 먼저(재현 안 되면 까닭 보고). +- [x] 415-1 H1 · H2 · M4 — 확인: 시험(관 옮김 뒤 세션 shoulderext · crossdesign 그대로 · 저장 중 runs 에 pipe/structure 없음 · 미리보기 요청 0) + 화면(B06 사면 쉬프트 · 단면 유형 → B05 관 5 m 옮김 → 편집 그대로 · 관 10 m + 지반 바꿈 → [저장] → 저장 본문 값). + - 검증완료 — test_415 7 · 관련 51 파일 294 통과 · 화면 = 관 351→356→361 편집 그대로(관 측점 고침 포함) · 저장 중 관 측점 361 유지 · 저장 본문 340 쉬프트 0.7 · 360 · 361 right_cut · 380 blasting_rock · 미리보기 0 · 되돌림 완료. + +- [x] 415-2 관 옮긴 뒤 [되돌리기] = 목록은 원래인데 공용 캐시 측점은 옮긴 자리(sub5 보고) — 415 와 같은 자리 · sub7 · 확인: 시험 + 화면(옮김 → 되돌리기 → 측점 · 캐시 원래). + - 검증완료 — test_415 되돌리기 · 화면 = 356 옮김 → 되돌리기 351(입력 · 측점 · 캐시 · 관 측점 고침) → 다시하기 356. + +- [x] 415-3 저장 노선 → 첫 초안 갈아끼움 때 관 측점 열쇠 갈림(B06 세션 pipe-s1 ↔ 계산 줄 pipe:p35100 · 누가거리 조절 초안 카드로 안 따라감 · sub8 알림) — H2 와 같은 자리 · sub7. + - 검증완료 — 열쇠 갈림 = 415-1 로 풀림(B06 연 길 · 초안 카드 358 옹벽 조절 그대로) · B05 만 연 길(조정창 맵 없음)은 안 따라감 → 갈아끼움 뒤 세션 칸 바로 옮김(옹벽 · 세월 · BOX · 집수 · 연동) · test_415 8 · 관련 50 파일 302 통과(323-9 둘 실패 = 합친 HEAD 에서도 · 이번 고침 무관) · 초안 버리면 351 되돌림. + +## 416. 한 페이지 끊김 ② — 저장 뒤 새 자료 · 관 길이 출처 · 오른쪽 판 노선 id (분석 412 3장 M1 · M5 · L2 · sub5 · Opus high) + + +- 정함(브레인): M1 = [저장](노선 안 바뀜) 끝에 늘 자료 다시 읽고 종단 · 오른쪽 판 다시 그림 · M5 = 관 길이는 공용 캐시(페이지 노선)에서 · L2 = 오른쪽 판 = 페이지 노선 id · 암선 기본값 = config. +- [x] 416-1 M1 · M5 · L2 — 확인: 시험 + 화면(B05 [저장] 뒤 평면 측점 누름 → 오른쪽 판 횡단 그림 · 면적 = B06 · 관 옮긴 뒤 좌측 관 길이 = B06 카드). + - 검증완료 — test_416 · 관련 391 통과 · 화면 B05 [저장] 뒤 10+0 판 = B06 카드 · 면적 3.5177/2.0208 = B06 · 관 17+11→17+5 좌측 7 m (6.6) = B06 카드 L=7 m (6.6) · 어두움 판 정상 · 조작 값 되돌림(9feba3de1 · 1db2f8f44). + +- [x] 416-2 `test_323_9_save_redraw` 둘 실패(메인 69823d830 · 저장 뒤 B06 카드 = 옛 자리 4+5 · 새 자리 4+8 · 47+0 아님 · 저장 중 다시 그림 차례 다름 · sub7 알림) — 416 M1(저장 끝 캐시) · 415 H2(저장 중 먹이기 멈춤) 중 어느 고침 탓인지 찾아 코드 고침(시험이 옛 규칙이면 까닭 보고 뒤 고쳐 씀) · sub5 · 확인: 323_9 · 416 · 415 · 323 묶음 통과 + 화면(B06 [저장] 뒤 카드 새 자리). + - 까닭 = 416 M1(9feba3de1) 이 캐시 비우기를 횡단 보기 done → 한 벌(design_shared) done 으로 옮김 · 헬퍼가 횡단 보기 done 만 불러 비우기 빠짐(앱 흠 아님) → 헬퍼 done = 한 벌 차례. + - 검증완료 — 323 · 415~417 · 관련 421 통과 · 화면 B06 관 17+11→17+8 [저장] 뒤 카드 17+8(L=8 m (7.7)) · B05 [저장] 뒤 오른쪽 판 카드 · DB · 파일 백업대로 되돌림(beec356af · ce8c9c1f2). + +## 417. 한 페이지 끊김 ③ — 평면 바꾼 저장 때 B06 조절 · 평면 초안 중 B06 단추 · 소단 깊이 (분석 412 3장 M2 · M3 · L4 · sub8 · Opus high) + + +- 정함(브레인): M2 = 노선 바꾼 [저장] 때 B06 거리 열쇠 조절(옹벽 · 세월 · BOX · 집수 · 덧 옹벽 · 경간 · 잇기 · 측점 폭 · 메모 · 상세 표) · 사면 쉬프트 · 소단 깊이를 새 노선 측점으로 옮겨 실음(측점 옮김 목록 · 서버 이월 열쇠 짝 · 거울 시험) · M3 · L4 = 평면 초안 횡단 입력에 사면 쉬프트 · 조절 · 소단 깊이 넣음(초안 중에도 B06 단추 먹음 · 저장 뒤 안 사라짐). +- [x] 417-1 M2 · M3 · L4 — 확인: 시험(노선 바꾼 저장 뒤 옹벽 조절 · 사면 쉬프트 남음 · 초안 중 ◀▶ 반영) + 화면(B06 옹벽 조절 → 교점 끌기 → [저장] → 조절 그대로 · 초안 중 사면 ◀▶). + - 검증완료 — test_417 8 · 관련 101 통과 · typecheck 0 · 화면(검증_sub8) 관 351 m 옹벽 d 0.9 + 400 m 사면 0.5 → 교점 끌기 → [저장] → 새 노선 관 334 m d 0.9 · 400 m 0.5(DB · 카드) · 초안 중 사면 ◀ 0.50 → 0.70(성토사면 0.65 → 0.78 m) · 초안 중 옹벽 ▶ 반영 · 프로젝트 되돌림. + +## 418. 초기화 정리 (요구 254-3 · 253-6 · sub1 · Opus high) + + +- 사용자 확정(254-3): 「노선 추천」 칸 [초기화] 지움 · 아래 [초기화] 기준 = 노선 추천으로 사용자가 [적용]한 노선(다른 추천으로 바꾸면 그것) — 지금 스냅샷 규칙 그대로. +- 정함(브레인): 노선 추천 [초기화]만 쓰던 길(편집기 handler · 「follow」 initial_choice 쓰기 · 전처리 초기 노선 읽기가 이것만 쓰면 함께) 걷음 · 아래 [초기화]는 저장 안 한 B08 · B09 초안 안 지움(B05 · B06 범위만) · 확인창 글 그대로. +- [x] 418-1 — 확인: 시험(단추 없음 · 아래 [초기화] 뒤 b08-* · b09-estimation 초안 남음 · 추천 [적용] → 고침 → 아래 [초기화] = [적용] 노선) + 화면. + - 검증완료 — `test_418_reset_cleanup` 등 77 통과 · typecheck 0 · 5174 화면 노선 추천 칸 단추 [노선 추천] 하나 · 아래 [초기화](서버 응답 가짜) 뒤 b08 넷 · b09-estimation 남음 · route-draft 지움 (af5c91e27). + +## 419. 노선 추천 엔진 — 원지반 기울기 참고만 · 삼각 없음 · 측점 필수 · 합치기 = 횡단 토공 (요구 253-1 · 253-4 · 254 · sub4 · Opus high) + + +- 사용자 확정(254): 곡선 수 줄이기 = 추천 안 기능(옵션 아님) · 측점 맞춤 필수 · 토공 = 측점별 횡단. +- 정함(브레인): `docs/raw/조사/2026-10-18_419_요구254_추천엔진.md` 4장 — 후보 거름 · `_trace` 판 · 큰 R · 합치기 · 측점 맞춤의 원지반 기울기 막기 걷음(탐색 링크 상한 남김 · 시종점 상한 넘음 알림) · 합치기 멈춤 = 노선 횡단 토공 +10 %(엔진 상수) · 판정 = 바뀐 측점 횡단 차이(420 `cross_earthwork_delta`) · 후보 줄 세움 = 상한 누른 계획선 횡단 → 위 3 균형 종단 → 고른 하나 정밀 · 삼각 없음(155° 이상도 곡선 · 못 두면 교점 지움) · MC = 일반측점 필수 · raw · unsnapped 걷음 · 시간 = 첫 갈래 지금 + 20 s 안. +- [x] 419-1 엔진 고침 — 확인: 시험(위반 수 = R · 계류 · 측점 · 삼각 0 · 측점 밖 0 · 갈래마다 다른 선 · 합치기 판정 횡단 차이) + 다섯 갈래 v7 대비 표(곡선 · 삼각 · 측점 밖 · 원지반 최대 기울기(참고) · 횡단 절 · 성 · 시간) + 화면(검증_sub4 추천 → [적용] → 곡선 · MC 측점 · 종단). + - 검증완료 — 시험 145 통과(test_419_1 새 · 406_1 · route_initial · 351_2 · 383_1 · 224_4 고침) · 검증_sub4 곡선 33 → 16~18 · 삼각 0 · 측점 밖 0 · 세 갈래 10~14 m 다른 선 · earthwork 횡단 21,577 → 20,194 ㎥ · 첫 갈래 123 → 50 s · 화면 [적용] 곡선 17 · MC 측점 위 17/17 · 위 3 → 5(표 `tmp/419_수치.md`). + +- [x] 419-2 후보 고르기 순서 의존(sub2 찾음 · 정밀 · 빠른 판 종단 섞어 견줌 → 캐시 따라 선 바뀜 · 420 전에도) — 같은 잣대끼리 줄 세우고 정밀은 고른 하나만 · `test_weight_ends_match_branches` xfail 풀기 · sub4. + - 검증완료 — 정밀 종단은 낼 사본에만(캐시 후보 = 빠른 판끼리) · xfail 풂 · 시험 test_419_1(캐시 후보에 정밀 없음 · 다른 갈래 먼저 돌려도 같은 선 · 고침 빼면 실패) · 대상 시험 199 통과. + +- [x] 419-3 [적용] 뒤 종단 최대 14.47 % > 상한 14 %(추천 셈 2 m 지형 14.0 % · [적용] 1 m 지형 · sub4 보고) — 정함(브레인): [적용] 종단도 상한 지킴(1 m 지형으로 다시 맞춘 뒤 넘으면 그 구간 다시 맞춤 · 종단곡선 넣은 뒤 다시 잼) · 위 5 개 균형 종단(설계 3 → 5) 승인 · sub4 · 확인: 시험 + 검증_sub4 [적용] 뒤 최대 ≤ 상한. + - 검증완료 — 원인 = 종단곡선 넣으려 꼭짓점 미는 맞춤(`pass_through`)이 직선을 가파르게 함 · 꼭짓점 맞춤에 직선 기울기 상한(균형 종단 상한 · 반올림 여유 0.1 mm) · 검증_sub4 토공 최소 [적용] 뒤 최대 14.47 → 14.0 %(넘음 표시 없음) · 되돌림(파일 차이 0 · DB 행 같음). +- [x] 421-2 추천 창 「제약 못 지킨 구간 N곳」 = R · 계류 · 측점만 셈 · 원지반 기울기는 「원지반 기울기(참고)」 줄로 따로 · `ends_over_limit` 이면 「시종점 높이 차가 상한을 넘음 — 종단으로 못 맞춤」 알림(sub4 보고) · sub1 · 확인: 시험 + 화면. + - 검증완료 — `test_421_2_violation_lines` 등 35 통과 · typecheck 0 · 5174 검증_sub1 다섯 갈래 = 기준 초과 0 · 못 지킨 구간 없음 · 원지반 참고 최대 35.8 / 25.5 / 23.4 / 21.8 / 30.7 % · 넘는 곳 14 / 10 / 8 / 10 / 11 · 시종점 알림은 응답 고쳐 밝음 · 어두움 확인 (8229a5449). + +- [x] 421-3 추천 창 「지형상 14% 로 못 이어져 상한을 29.1% 로 풂」 글 = 「탐색 링크 한도 14 → 29.1 % 로 풂(지형상 14 % 로 못 이음 · 4 m 마디 원지반)」 꼴로(엔진 맞음 · 잣대가 원지반 참고 20 m 와 다름 · sub4 보고) · sub1 · 확인: 시험 + 화면. + - 검증완료 — `test_b05_routeedit_initial` 등 30 통과 · typecheck 0 · 5174 검증_sub1 토공 최소 = 「탐색 링크 한도 14.0 → 29.1% 로 풂(지형상 14.0% 로 못 이음 · 4 m 마디)」 · 원지반 참고 최대 23.4 % 줄과 함께 밝음 · 어두움 확인 · 도움말 「탐색 링크 한도를 풂」 (0456c2d3d). + +## 420. 추천 횡단 토공 · 저장본 판 · [재계산] 서버 (요구 254 · sub2 · Opus high) + + +- 정함(브레인): 새 `B05_Profile/B05_Profile_Engine_RouteInitial_CrossEarth.py` = `cross_earthwork(line, chainages, design_z | None, terrain, standard)` · `cross_earthwork_delta(before, after, changed_chainages, …)`(공식 `compute_cross_design` · 평균단면법 · 종단 끔 = 계획고 지반고) · 균형 종단 표준단면 = 프로젝트 저장 패널값 · 결과 절 · 성 = 횡단 · `ALGO_VERSION` 8 + 엔진 소스 지문 열쇠 · 옛 판 저장본 미리 셈 때 지움 · 요청 `recompute` = 묶음 잠금 안에서 지금 입력 묶음 저장본 지우고 `_POOLS` 버림 → 새로 셈 · `initial_choice.json` with_profile · 미리 셈 = 종단 켬 다섯 갈래. +- [x] 420-1 — 확인: 시험(횡단 토공 = 저장 정본 ±6 % · 재계산 = 파일 새로 · 셈 수 1 → 2 · 옛 판 지움 · with_profile 되살림 · 224_3 · 351_1 · 343_2 · 364_4 고쳐 씀). + - 검증완료 — 시험 420_1 12 · 224_3 · 351_1 · 343_2 · 364_4 · route_initial 통과 · 검증_sub2 횡단 토공 = 저장 정본 절 +2.3 % · 성 +4.0 %(2 m) / +0.8 % · +1.2 %(1 m) · 0.18 s · 8004 실제 요청: 옛 판 10 지움 → v8 다섯 · [재계산] 저장본 5 지움 → 새 파일 · 뒤 요청 저장본 (eee1da09f) · 검증 대기. + +- [x] 420-2 sub2 물음 답 — 정함(브레인): ① 다른 엔진 지문 저장본 자동 지우기 걷음(두 PC · 워크트리가 서로 지움) — 지문 다른 파일은 안 읽고 둠 · 30일 지난 것만 지움 · [재계산]은 지금 입력 것만 지움 ② `test_each_branch_best_at_own_goal` 파일째 돌릴 때 실패(앞 시험 묶음 캐시) = 시험끼리 캐시 비우기 · sub2 · 확인: 시험(지문 다른 파일 남음 · 30일 지난 것 지움 · 파일째 통과). + - 검증완료 — route_initial 파일째 · 420_1 · 224_3 · 351_1 · 343_2 · 364_4 = 80 통과 · 1 xfail(`test_weight_ends_match_branches` — 캐시 비우면 420 전 코드에서도 실패 · 엔진 pick 정밀 · 빠른 판 섞어 견줌 · 419 에서 풂 · 브레인 지시) · 다른 지문 29일 남음 · 31 · 40일 지움 · 재계산 · 두 벌 정리에서 다른 지문 안 건드림 (dfe17b5ee) · 검증 대기. + +## 421. 추천 창 — 측점 맞춤 → 종단 반영 · [재계산] 늘 켜짐 (요구 254-2 · sub1 · 418 뒤 · Opus high) + + +- 정함(브레인): 「측점 맞춤」 단추 지움 → 그 자리 「종단 반영」(기본 켬 · 다섯 갈래 · 누르면 바로) · [적용] 균형 종단 = 단추 값 · [재계산] 늘 켜짐(입력 오류 · 셈 중 빼고) · `recompute` 보냄 · 도움말 글 · unsnapped 화면 걷음. +- [x] 421-1 — 확인: 시험(383_3 · 383_1 · 351_2 · 345_4 고쳐 씀) + 화면(종단 반영 끔 · 켬 · [재계산] = 진행 줄 · 새 결과 · [적용] 뒤 종단). + - 검증완료 — `test_421_recommend_profile` 등 58 통과 · typecheck 0 · 5174 검증_sub1 추천 창 = [종단 반영] 켬 기본 · 끔 → with_profile false 바로 셈 · 균형 종단 줄 사라짐 · [재계산] 진행 줄 + recompute true · [적용](저장 가짜) 몸통 balanced_profile · initial.with_profile = 단추 값 (67de77c48) · 남음 = 「새 결과」 · 「[적용] 뒤 종단」 실제 값은 420 서버 합친 뒤. + +## 422. 요구 253 · 254 마무리 — 합치기 · 시험 · 다음 장 후보 (브레인) + + +- [x] 422-1 합치기 · 묶음 다섯 · typecheck · 장 시험. +- 검증완료(422) — 413~421 · 415-2 · 415-3 · 416-2 · 419-2 · 419-3 · 420-2 · 421-2 · 421-3 메인 합침(ce8c9c1f2) · 서버 묶음 다섯 · typecheck 0 · 장 시험 58 파일 421 통과(실패 둘 = 323_9 헬퍼 옛 차례 → 416-2 고쳐 3 통과) · 창마다 화면 확인(브레인 화면 검증 · 아티팩트는 요청 없음) · 쉬는 창 여덟 /clear · 탭 0 · 검증 대기. +- [x] 422-2 다음 장 후보 → 424~432 로 넘김(요구 255~261) — (요구 255 확인 · 에이전트 재현 = 서버 코드 · 1 m 지형 · 저장값과 소수 넷째 자리 같음 · 사용자 지시 뒤) — ① 관 옮긴 초안의 관 길이 7.2 대 저장 뒤 7.7 m — 257 재확인: 집수정 높이는 안 잃음(관 옵션에 저장 · 옮겨도 따라감 · 1.2 는 빈 칸 기본값 · 255 설명 틀림) · 더 맞는 까닭(추정) = 초안 그림의 노면 끝(노견 · 확폭 포함) 자리가 저장 뒤보다 0.35~0.4 m 좁았음 → 형상 차 → 길이 차 · 판정 = 348 m 초안 카드 S(약 0.6 % = 높이 · 0.0~0.1 % = 노면 끝) 또는 초안 `design.road_edges` 한 번 보기 ② 관을 옮겼다 되돌려 저장하면 그 자리 **종단 계획선**의 꺾임점(VIP)이 사라져 안 돌아옴(351 m 원지반 지나던 꺾임점 → 1.26 m 깎인 모양 · `_follow_moved_stations` · `followMovedNodes` 가 지우기만 · 새 측점에 안 세움 · 「최소고 강제」(관 위 흙 0.5 m 하한 · 기본 꺼짐)와 무관) ③ [초기화] 빈틈 — 스냅샷 없는 폴백이 덧 측점 안 지움 · 스냅샷에 배수 폴더 없으면 관 편집 안 돌아감 · M02 구조물 복사본 · 하위 단계 STALE 안 맞춤(정상 길은 구조물 · 관 목록 · 위치 다 돌아감). + +## 423. 평면도 교각점 녹색 계열 · 테마 (요구 256 · sub3 · Sonnet high) + + +- 정함(브레인): 교각점(IP 원 · 곡선 없는 교각점 삼각) 색 = 녹색 계열 · 밝음 · 어두움 따로 토큰(지도 바탕 · 노선 · 등고선 · 세류선과 대비 · 어두움에서도 읽힘) · 고른 교각점 · 올림 표시는 지금처럼 구별되게 · 다른 표지(BC · EC 네모 · 곡선 3점 · 구조물 마커) 색 그대로. +- [x] 423-1 — 확인: 시험(색 토큰 읽기 · test_349 등 통과) + 화면 한 장씩(밝음 · 어두움 · 고른 교각점). + - 검증완료 — 새 토큰 `--map-route-node`(밝음 #15803d · 어두움 #4ade80 · 테마 css 세 자리) · 교각점 원 · 삼각 채움만 녹색(기준 미달 붉음 · 고정 황금 · 올림 고리 · BC · EC 네모 · 구조물 마커 그대로) · test_349 · 391 · 381_3 통과 + 새 토큰 시험 1 · typecheck 0 · 화면(검증_sub3) 밝음 · 어두움 · 고른 교각점 모두 녹색 구별됨 · 사진 tmp/423_light.png · 423_dark.png · 423_pick_dark.png · 423_pick_light.png (검증 대기). + +## 424. 횡단 설계중심 좌우 끔 — 좌우는 평면으로만 (요구 260 · sub1 · Opus high) + + +- 사용자 확정(260): 횡단도 설계중심 ◀▶ · 좌우 끌기 작동 안 함 · ▲▼ 는 그대로. +- [x] 424-1 B06 `B06_Section_UI_Cross_Design_Pick.ts:400, 541-569` 가로축 · `B06_Section_UI_Cross_Center.ts` 노선 이동 · `A00_Common/design/design_page.ts:155` · `B05_Profile_UI_RouteEdit.ts:625` · `B05_Profile_UI_RouteEdit_Shift.ts` · `logic/B05_Profile_RouteShift.ts` 걷음 — 확인: 시험(356 · 356_4 고쳐 씀) + 화면(◀▶ 없음 · ▲▼ 됨). + - 검증완료 — 중심점 칸 = 버튼 0 · 「▲▼ = 종단 계획고 · 좌우 이동은 평면에서」 · 시험 356(가짜 DOM · ◀▶ 키 막음 · 끌기 듣개 0) · 이웃 시험 280 통과(356_4 넷은 검증_sub7 storage 없어 건너뜀) · typecheck 0 · 화면(검증_sub1 · 5174) ◀▶ = 세션 변화 0 · ▲ = 계획고 초안 생김 · 세션 되돌림 (검증 대기). + +## 425. B06 위 평면도 겹침 패널 (요구 258 · sub2 · Opus high) + + +- 정함(브레인): 분석 424 5장 — 기존 평면 편집기 노드를 횡단 보기 위 겹침 패널로 옮김(열 때 · 횡단 숨김 때 제자리) · 여는 손잡이 · 패널 모두 겹침(z 4 · 높이 45 % 안) · 단추 줄 · 상태줄 · 범례 · 잰 값 · 오른쪽 횡단 판 · 등고선 자물쇠 숨김 · 보기 · 팬 · 휠 확대만(편집 막음) · 평면 방향키 범위 좁힘 · 새 `A00_Common/design/design_plan_peek.ts` · `RouteEdit.ts` · `Style_Cross.css` 안 건드림. +- [x] 425-1 — 확인: 시험(test_258 새 · design_view_parity · design_page_single · 349_0h · 345_5 · 356 · 207_1) + 화면(B06 바로 열기 → 손잡이 → 평면 · 카드 고름 → 법선 · ▲▼ 뒤 평면 다시 그림 · 밝음 · 어두움). + - 검증완료 — 시험 49 통과 · 4 건너뜀(356-4) · typecheck 0 · 화면 높이 0.450 · z 4 · 왼 · 오른 누름 · 두 번 클릭 막힘 · 가운데 · 휠 통과 · 카드 고름 · 계획고 바꿈 뒤 평면 다시 그림 · B05 로 가면 제자리 · 어두움 · 값 되돌림. + +## 426. 종단 직선 판정 하나 · 끝점 꼭짓점 · 편집 측점 수 (요구 259 · sub3 · Opus high) + + +- 정함(브레인): 분석 424 6장 · 10장 — 직선 판정 = 높이 기준(1e-5 m) 한 함수(TS `Alignment.ts` buildCurves ↔ 파이썬 `Grade_Alignment.py:306` 짝 · Straighten 직선 찾기 · Pivot 이웃끼리 · 표는 안전망) · 직선화 · 자유지정 끝점이 꼭짓점 아니면 지금 높이로 꼭짓점 세움 · 고른 직선 기울이기 = 지금 경첩 높이 + 걸음 · 직선이 된 꼭짓점 기억 R 지움 · 「편집 측점 N개」 = 꺾인 편집 꼭짓점 수 · 0 오프셋 지움. +- [x] 426-1 — 확인: 새 시험(붙은 측점 100/100.4 · 120/120.25 · 직선화 뒤 R 없음 · 40~140 한 직선 · ▲ 톱니 없음 · 누름 쌓임 · 끝점 꼭짓점 아님 · 파이썬 거울) · 355_1 · 215_1 · 344_2 · 400 + 화면(구조물 측점 끼인 구간 직선화 · 자유지정 → 표 R · ▲▼). + - 검증완료 — 직선 판정 = 꼭짓점 높이 1e-5 m 한 함수(TS `logic/B05_Profile_Profile_Straight.ts` ↔ 파이썬 `is_straight_bend`) · 곡선 넣기 · ▲▼ 축(이웃끼리) · 직선 찾기 · 적용 한 곳 `tidyEdits`(직선 위 R · 0 오프셋 지움) · 끝점 꼭짓점 아니면 지금 높이로 세움(직선화 · 자유지정) · 고른 직선 기울이기 = 지금 경첩 높이 + 걸음 · 편집 측점 수 = 꺾인 편집 꼭짓점 · 새 test_426 10 + 손댄 파일 시험 26개 218 통과 · typecheck 0 · 화면(검증_sub3 · 저장 안 함) 18+0~21+0 직선화(19+8 · 19+9 붙은 구조물 측점) 뒤 R 빈칸 · 편집 측점 표시 없음(옛 4개) · 19+0 ▲ 두 번 = 그 점만 R · 톱니 없음 · 자유지정 21+0~24+0 = 22+0 R 151.9 · 23+0 빈칸 · 고른 직선 ▲▲▼▼ = 경첩 +0.1 · +0.2 · +0.1 · 0 · 끝에 R 빈칸 · 사진 tmp/426_straight_up.png · 426_tilt_back.png · 묶음 다시 지음 필요(Alignment · Pivot) (검증 대기). + +## 427. 관 · 구조물 옮김 때 종단 꼭짓점 따라감 (요구 255-2 · sub4 · Opus high) + + +- 정함(브레인): 분석 424 2장 · 10장 — 옮긴 새 측점에 자동 계획선 규칙(원지반 지남)으로 꼭짓점 세움 · 사용자가 높이 고친 꼭짓점은 높이째 옮김 · 파이썬 `_follow_moved_stations` ↔ TS `followMovedNodes` 짝 · 거울 시험. +- [x] 427-1 — 확인: 시험(351 → 348 → 351 왕복 저장 뒤 340~360 m 계획고 · DB 행 처음과 같음) + 화면. + - 검증완료 — 짝 못 찾은 옛 측점 ↔ 새 측점 같은 수면 차례대로 짝 · 높이 고친 꼭짓점은 높이째 · 편집째 옮김 · 나머지 새 측점은 원지반 지나는 꼭짓점 세움(파이썬 `_seat_born_nodes` ↔ TS `followMovedNodes` · 다른 꼭짓점 그대로) · 새 test_427_1 8개(왕복 340 · 351 · 360 차 0.000007 m 이하 · 편집 0.4 왕복 같음 · 화면 짝 3경우 1e-6) + 192_1 · 213_1 · 238_1 · 272_1 · 272_2 · 407_3 · 342_1 44 통과 · typecheck 0 · 화면(검증_sub4 · 8006 · 5179) 관 351 → 348 [저장] = 348 계획고 834.094 = 지반고 · 351 꼭짓점 지움 → 351 [저장] = 351 계획고 834.867008(처음 834.866994) · 저장 전 화면도 348 꼭짓점 · DB 6표 · storage 되돌림 확인 · 묶음 다시 지음 필요(common_util_structure_station) (검증 대기). + +- [x] 427-2 `test_410_follow_xy` 오류 3 — 427 이 `common_util_structure_station.ts` 에 `B05_Profile_UI_Profile_Alignment` import 를 더해 410 시험 도우미(`helper_410_follow_xy.cjs` stub 목록)가 모름 · 메인 f9cd31d7c 에서 재현 · sub4 · 확인: 410 · 427_1 · 272_1 · 428 통과(공용 파일이 B05 화면 모듈을 끄는 게 맞는지도 한 줄 — 서버 Node 묶음 크기). + - 검증완료 — stub 대신 공용 파일에서 B05 import 뺌(공용을 엄격 stub 로 읽는 도우미 20개 · 묶음 의존 그대로) · `followMovedNodes` = 옮김 · 지움 · 세울 측점만 · 꼭짓점 높이 셈은 새 `B05_Profile/logic/B05_Profile_Grade_Seat.ts` `seatBornNodes`(파이썬 `_seat_born_nodes` 짝) · `design_profile_base` 가 차례로 부름 · 410 · 427_1 · 272_1 · 428 · 415 33 통과 + 공용 파일 읽는 도우미 시험 23파일 194 통과 · typecheck 0 · 묶음 다시 지음 필요(common_util_structure_station · Grade_Seat) (검증 대기). + +## 428. 평면 · 관 옮김 뒤 횡단 형상 · 측점 한 값 (요구 255-1 · 257-1 · 261 · sub5 · Opus high) + + +- 정함(브레인): 분석 424 1장 · 7장 — ① 측점 갈아끼울 때 상단측 새로 · 0.5 m 넘게 옮긴 시설 측점은 기본 설계 + 사용자가 만진 칸만 ② 노선 초안 중 관 길이 출처 = 계산 줄 상세 ③ 저장 노선 다시 셈 창구에 미교차 넓힘(서버와 같게) ④ 관 PUT 끝 서버가 측점 다시 세움 ⑤ `rebasePipeDraft` 따라가기만 한 관 = 서버 누가거리 · GET 이 x · y 줌 ⑥ 「측점이 없는 구조물」 알림 [저장] 뒤 다시 봄. +- [x] 428-1 — 확인: 새 거울 시험(옮긴 관 관 길이 브라우저 대 서버) · 346_2 넓힘 · 349_0j · 410 · 415 · 417 + 화면(관 옮김 초안 길이 = 저장 뒤 · 평면 이동 [저장] 뒤 알림 없음 · 옛 자리 카드 없음). + - 검증완료 — test_428 6 · 관련 시험 77 통과(옛 코드 = 4 실패) · 화면 검증_sub5: 관 17+11 → 17+17 관 길이 7.9 = 저장 뒤 7.9 · 평면 IP 이동 [저장] 뒤 관 352 서버 = 화면 · 알림 0 · 17+11 카드 없음 · 되돌리기 351 복귀 · 백업 대조 같음. + +## 429. [저장] 길 정합 (분석 424 9장 ④⑤⑧⑨ · sub6 · Opus high) + + +- 정함(브레인): ④ 노선 [저장] 뒤 계획선 차례가 끝나면 횡단 저장 한 번 늘 ⑤ 상단측 차례가 소단 · 깎기 경사 · 조절 값 남김 ⑧ 유토 한 벌(쓰지 않는 단계 걷음) ⑨ 덧 측점 바뀜 = 계산 줄 입력 · [저장] 차례 실패 = 다음 차례 멈추고 알림. +- [x] 429-1 — 확인: 시험(초안 계획고 → [저장] 뒤 횡단 설계 높이 = 저장 종단 · 상단측 뒤 값 유지 · 덧 측점 묶음) + 화면. ④⑤⑨ 만 · ⑧ 은 433 으로 넘김. + - 검증완료 — test_429_save_path 5 · test_design_store_save 10 · 이웃 시험 54 통과 · typecheck 0 · 화면(검증_sub6): 노선 초안 + 60 m ▲0.5 + 덧 측점 → [저장] 뒤 58 측점 횡단 높이 = 저장 종단(차 0) · 되돌림(DB 행 · 파일 차 0). + +## 430. 평면 형상 제어 규칙 한 곳 (분석 424 8장 · sub7 · Opus high) + + +- 정함(브레인): 하한 검사 = 모든 평면 조작이 `applyEdit` 한 곳에서(새로 깨면 되돌림 · 까닭 상태줄) · 곡선 삭제 155° 미만 경고 · 끌기 놓을 때도 「함께 밀린 교점 · 못 맞춘 곡선」 보고 · 스냅 끔 · 간격 바꿈 즉시 계산 줄 · R · 길이 고정 · 넣은 R 곡선표 저장(짝) · 0.5 m 겹친 노드 · 못 그린 곡선 표시. +- [x] 430-1 — 확인: 시험 + 화면(끼우기 · 손잡이 · 곡선 삭제 하한 · 저장 뒤 고정 · R 되살림). + - 검증완료 — test_430 13 · 손닿은 시험 331 통과 · typecheck · 화면(검증_sub7 · 8009 · 5182): 노드 곁 끼우기 되돌림(IP24 · IP25 까닭) · 손잡이 하한 걸음 막힘 · 놓을 때 「함께 밀린 교점 2곳 · 못 맞춘 곡선 No.47+1」 · 148.4° 곡선 삭제 경고 · 156° 경고 없음 · 겹친 노드 IP24 표시 · 스냅 끔 · 간격 1 m 초안 즉시 · [저장] 뒤 R 고정 · 넣은 R 500(그린 94.4) 되살림 · 백업으로 되돌림. 묶음 다시 지음 필요(server-calc — `_Edits` · `_Curve` 를 끎 · 셈 그대로). 검증 대기. + +- [x] 430-2 장 시험 실패 둘(앱 흠 아님 · 시험 늦음) — ① `test_408_radius_downstream` 오류 11 = 430 이 `B05_Profile_UI_RouteEdit_CurveBar.ts` 에 `@ui/ui_template_elements`(showToast) import 를 더해 `helper_408_radius_downstream.cjs` 가 못 읽음 → 도우미 stub ② `test_383_2_route_keys::test_이음_끌기_걸기_한_줄_창_가로채기` = 425 가 방향키 범위를 `.b05-route__main .b05-routeedit` 로 좁힘 → 단언 새 글로 · sub7 · 확인: 408 · 383_2 · 430 · 258 통과. + - 검증완료 — 408 · 383_2 · 430 · 398_2 · 258(둘) 48 통과 · 도우미 stub · 단언 새 글만(앱 코드 그대로). 검증 대기. + +## 431. [초기화] 빈틈 (분석 424 3장 · sub8 · Opus high) + + +- 정함(브레인): 폴백이 덧 측점도 지움 · 스냅샷에 배수 폴더 없으면 관 편집도 비움(문서대로) · [초기화] 뒤 M02 구조물 사본 맞춤 · B07 · B08 단계 STALE. +- [x] 431-1 — 확인: 시험(폴백 덧 측점 · 배수 없는 스냅샷 · 사본 · 단계) + 화면 한 번. + - 검증완료(sub8 · 검증 대기): `test_431_reset_gaps` 4 + 스냅샷 · 418 시험 16 통과 · 화면 [초기화] = 노선 380 → 404 · 단계 4 COMPLETE → STALE(스텝바 상세설계 state-stale) · 남은 사본 폴더 지움 · 백업으로 되돌림. + +## 432. 종단곡선 기본 L 20 m · 법정 경고 · 초기값 큰 R = 직선 · 작은 것 (요구 262 · 분석 424 8장 · 9장 ⑥⑦ · 432-1 sub3(426 뒤) · 432-3 sub8(431 뒤) · Opus high) + + +- 사용자 확정(262): 종단곡선 기본 L 15 → 20 m · 막지 않음(못 넣는 곳 있음) · 법정 경고는 둠 · 초기값(자동설계 체인 · 추천 [적용]으로 처음 만드는 종단)에서만 L 20 기준 R > 500 m(대수차 4 % 안쪽) 꼭짓점은 곡선 없이 직선으로 · 그 뒤 고침은 사용자 몫(손 편집에 이 규칙 안 걺). +- 정함(브레인): 「직선」 = 그 꼭짓점에 종단곡선을 두지 않음(R 없음 · 표에 R 안 보임) · 꼭짓점 높이는 그대로(초기 계획선 원지반 지남 유지) · 기본 L 은 config 한 곳 + TS 상수 짝 · 법정 경고 = 설계속도별 R · L 최소 미달 표시(20 km/h R 100 · L 20 · 비포장 대수차 5 % 이하 제외 · 지식DB 별표2 마.) · 45 % 규칙으로 줄어든 곳도 경고 글 그대로. +- [x] 432-1 기본 L 20 · 법정 경고 · 초기값 R > 500 직선(파이썬 첫 계획선 · 균형 종단 ↔ TS 짝 · 거울 시험) — 확인: 시험(초기값 꼭짓점 대수차 < 4 % = 곡선 없음 · 손 편집은 기본 곡선 · 경고 · 짝) + 화면(새 초기값 종단 표 R · 경고). + - 검증완료 — config 기본 L 20 · 초기값 직선 문턱 500 m(TS `logic/B05_Profile_Profile_CurveLaw.ts` 상수 짝) · 초기값(1차 지반 종단 · 추천 [적용] `_set_base_pvi`)에서 기본 L 기준 R > 500 m 꼭짓점 열쇠를 정책 `no_curve_keys` 로 얼림(곡선 없음 · 꼭짓점 높이 그대로) · 그 꼭짓점 손 편집 · R 넣으면 기본 곡선 · 이웃 편집엔 얼린 채 · 법정 종단곡선 R · L 미달 = 경고 글(파이썬 · TS 같은 글) + 종단 요약줄 「종단곡선 미달 N 곳」(툴팁 내역 · 생략 가능 제외 · 45 % 줄인 곳 포함) · 노선 [저장]은 옛 정책(L · 열쇠) 이어받고 바뀐 자리 새 꼭짓점만 새 지반 열쇠(브레인 B · `carry_policy` ↔ TS planline `carryNoCurveKeys` · Route_Save 한 줄) · 옛 저장분 그대로 · 새 test_432_1 10 + 손댄 모듈 시험 54개 384 · 125 통과 · typecheck 0 · 화면(검증_sub3 · 저장 안 함) 옛 종단 L 15 · 열쇠 없음 그대로 · 평면 교점 옮긴 초안 = L 15 유지 · 안 바뀐 구간 R 243.0 · 270.2 · 2705.1 그대로 · 바뀐 구간만 새 열쇠 10 · 사진 tmp/432_draft_carry.png · 미검: 새 초기값 화면(경고 칩)은 체인 다시 돌림 = DB · storage 씀이라 안 함(단위 시험만) · 묶음 다시 지음 필요(Alignment · Ground · Pipeline_Grade · Carry) (검증 대기). +- [x] 432-2 사용자 결정 — 기본 L 20 m · 막지 않음 · 경고 둠(262). +- [x] 432-3 작은 것 — 노선 초안 지반 = 설계 지형 · 노선 [저장] 알림에 새 교차 관 개수 · MC 곡선 측점 열쇠로 B06 편집 버려지는지 확인 · 고침 — 확인: 시험 + 화면 한 장. + - 검증완료(sub8 · 검증 대기): 초안 지형 = 확인 · 고칠 것 없음(Replan.py:359 `switch_design_terrain` — 초안 지형이 [저장] 때 설계 지형) · 새 교차 관 개수 = 이미 알림에 있음(`routeSaveSummary` · 시험 346-3) · MC 열쇠 = 버려짐 확인 → 가까운 새 곡선 측점(10 m 안 · 하나씩)으로 넘김(`curve_moves` ↔ `curveMoves` 짝) · `test_432_3_curve_key` 5 + 관련 47 통과 · typecheck · B06 화면 로드 한 장(tmp/432_3_b06.png). + +## 433. 다음 장 후보 (요구 255~262 장에서 창이 찾은 것 · 장 끝에 한 번에) — (일부 · 남은 줄은 PLAN.md) + +- [x] 433-1 test_365 ⑧ 「중심점 좌우」 걸음 이름만 남음(424 뒤 · sub1). → 고쳐짐 확인(요구 334 · 453). +- [x] 433-2 옛 검증 프로젝트 id(예 검증_sub7 6d3b2812)에 기대는 시험이 건너뜀(356_4 등) — 새 id(OWNERS.md) 로 자료 다시 세울지(sub1). → 고쳐짐 확인(요구 334 · 507-4). +- [x] 433-3 유토 계산 단계 두 벌 하나로(쓰지 않는 masshaul · haul 단계 걷음 · 시험 7개 탐침 고침 · 429 ⑧ 에서 넘김 · sub6). → 고쳐짐 확인(요구 334 · 454). +- [x] 433-4 화면 확인 — 곡선 있는 노선에서 MC 곡선 측점 카드 고친 뒤 그 곡선 R 바꿈 → B06 고침이 새 곡선 측점으로 남는지(432-3 은 묶음 시험으로만 판정 · sub8). → 고쳐짐 확인(요구 334 · 시험만). +- [x] 433-5 관 옮긴 뒤 이웃 꼭짓점(340 · 360)은 높이 그대로라 이웃 측점 계획고가 지반에서 0.1 m 안팎 뜸(옛 판도 같음 · sub4). → 고쳐짐 확인(요구 334 · 455). +- [x] 433-6 검증_sub4 에 처음부터 358 m 관 측점이 종단에 없었음 — 다시 만든 프로젝트 자료 점검(sub4). → 고쳐짐 확인(요구 334 · 자료 있음). +- [x] 433-7 ⚠ B05 [저장]이 세션 관 초안보다 화면 메모리 관 목록을 보냄(새로고침 전 초안이 덮임 · 자료 잃음 가능 — 먼저 재현 · sub4). → 안 생김 확인(요구 334 · 33201b14e). +- [x] 433-8 B06 평면 겹침 — 평면이 숨은 채 처음 크기를 겹침 패널(작은 높이)에서 받으면 그 배율이 B05 평면에도 남음 · 종단 판 펼친 B06 에선 겹침 평면 높이 100 px 안팎(높이 규칙 다시 · sub2). → 고쳐짐 확인(요구 334 · 436). +- [x] 433-9 관 옮김 [저장] 뒤 그 측점 계획고가 초안과 다름(835.29 → 834.63) — 427(종단 꼭짓점 짝) 합친 뒤 다시 잼(sub5). → 고쳐짐 확인(요구 334 · 455). +- [x] 433-10 관 PUT 뒤 옛 자리 횡단 파일(cross_00351m)이 횡단 저장 때까지 남음 · 「측점 없는 구조물」 알림 다시 봄이 저장 끝 신호 없이 0.3 s 기다림(sub5). → 고쳐짐 확인(요구 334 · ① 452 · ② 일부러 둔 지름길). +- [x] 433-11 ⚠ 덧 측점 넣기 · 빼기 뒤 B05 누가토량이 서버 −17,570.7 → 브라우저 −9,722 로 크게 뜀(저장 직후 −16,248 → −9,150 · 다시 읽거나 [저장] 하면 서버 값 · 저장분 안 바뀜) — 저장 노선 횡단 입력 두 벌(분석 424 9장 뿌리) · 먼저 고칠 것(sub6). → 안 생김 확인(요구 334 · e51dd2a80). +- [x] 433-12 노선 저장 뒤 다른 [저장] 차례가 실패하면 노선 초안 칸(0) 계획고가 다음 [저장]에서 안 나감(옛 흠 · 드묾 · sub6). → 고쳐짐 확인(요구 334 · 449). +- [x] 433-14 노드 끌기가 하한에 막힌 채 놓아도 스냅 미리보기 맞춤이 한 걸음으로 남음 · 스냅만 바꾼 뒤 노선을 처음으로 되돌리면 초안 null · 낮은 확대에서 R 12 곡선 손잡이가 노드 집기 안이라 못 잡음(sub7). → 고쳐짐 확인(요구 334 · 453). + +## 434. 요구 255~262 마무리 (브레인) + + +- [x] 434-1 합치기 · 묶음 다섯 · typecheck · 장 시험. +- 검증완료(434) — 424~432 · 427-2 · 430-2 메인 합침(0176ae4e1) · 충돌 둘 브레인이 풂(351_2 · 383_1 단언 = 419 · design_page import = 424 + 428) · 서버 묶음 다섯 · typecheck 0 · 장 시험 64 파일 502 통과 · 창마다 화면 확인 · 쉬는 창 여덟 /clear · 다음 장 후보 = 433(14) · 검증 대기. + +## 435. B06 바뀜 원 작게 (요구 263-1 · sub3 · Sonnet high) + + +- 사용자 확정(263-1): 절토 · 성토 바뀜 자리 원(414)은 잘 됨 · 원이 너무 큼 · 확대 · 축소에 맞춰 크기 정하는 것 그대로 · 조금 작게. +- 정함(브레인): 지금 반지름(8 px · `B06_Section_UI_Cross_Center.ts:17` 근처)의 약 60 %(5 px 안팎) · 잡는 범위(마우스 가까이 보임 · 누름)는 지금 그대로 두어 잡기 쉬움 유지 · 상세 창 확대 보정 같이. +- [x] 435-1 — 확인: 시험(370_2 · 414 통과) + 화면 한 장(바뀜 자리 원 · 확대 · 축소 · 밝음 · 어두움). + - 바뀜 자리 점 반지름 8 → 5 px · 잡는 범위 8.75 px 그대로(굵은 투명 테두리) · 검증완료(370_2 시험 7 통과 · typecheck · prettier) · 화면 검증완료(ORCA 5178 · 검증_sub3 · 4+0 측점 바뀜 원): 화면 반지름 4.98 px(가로 개수 2 · 3 · 5 = 카드 550 · 361 · 209 px 에서 4.98 · 4.98 · 4.96) · 마우스 중심 0 · 6 · 8 px = 보임 · 11 · 16 · 30 px = 안 보임 · 밝음 · 어두움 모두 같음 · 바꾼 값(가로 개수 · 종단 패널 · 테마 · 프로젝트 키) 되돌림. + +## 436. B06 평면 패널 — 높이 조절 · B05 조작 그대로 · 맞춤 없음 (요구 263-2 · sub2 · Opus high) + + +- 사용자 확정(263-2): 패널 높이 조절 · 내용 맞춤(fit) 필요 없음 · B05 평면에서 단추 묶음 · 안내 글 · 오른쪽 횡단 판만 감춘 꼴 · 로직 · 캐시 공용(B06 전용 로직 만들지 않음) · 감춘 메뉴의 키보드 · 마우스 조작은 됨 · 옵션 값은 B05 항목 값 공유 · 처음 높이 = 지금(45 %)의 70 % 안팎. +- 정함(브레인): 425 의 편집 누름 막기 걷음(끌기 · 끼우기 · 지우기 · 방향키 · 휠 · 팬 모두 B05 와 같음 · 같은 편집기 · 같은 되돌리기) · 감추는 것 = 단추 줄 · 안내 · 상태줄 · 범례 · 잰 값 창 · 오른쪽 횡단 판 · 등고선 자물쇠 단추(보기 켬끔 · 스냅 간격 등은 B05 값 그대로 따름) · 높이 = 패널 아래 끝 끌어 조절(위아래 한도 · 높이는 화면 기억 pref) · 처음 높이 약 32 % · 열 때 · 크기 바뀔 때 내용 맞춤 안 함(B05 보던 자리 · 배율 그대로 — 433-8 같이 풂) · 키 범위(425) 그대로. +- [x] 436-1 — 확인: 시험(258 고쳐 씀 · design_view_parity · 349_0h · 345_5 · 383_2) + 화면(B06 평면 패널 높이 끌기 · 교점 끌기 → B06 카드 · 종단 바뀜 · 방향키 · Ctrl+Z · 열고 닫아도 배율 그대로 · 밝음 · 어두움 · 되돌림). + - 검증완료 — 시험 28 통과 · typecheck 0 · 화면(검증_sub2): 처음 160 px(칸 225 px · 32 % 바닥 160 px) · 끌기 120~177 px · 기억 · 두 번 누름 되돌림 · 열고 닫고 B05 가도 1 m 당 1.5825 px 그대로 · 교점 끌기 누가토량 −17,570.7 → −16,407.1 · 방향키 먹음 · 카드 누른 뒤 안 먹음 · Ctrl+Z 둘 = 원래 · 끼우기 27→28 · 지우기 28→27 · 어두움 · 값 되돌림. 436-2 — 345_5b 단언 새 호출(home · 뜻 그대로 = 처음 열기 맞춤 · 맞춤 단추 없음) · 345_5b · 345_5 · 258 · 349_0h 16 통과. + +## 437. ☰ 서랍 안 항목 폭 맞춤 (요구 264 · sub1 · Sonnet high) + + +- 사용자 확정(264): 서랍 폭 그대로 · 안 항목(진행 단계 단추 · 홈페이지 · 언어 · 설정 · 사용자 · 터치 모드 줄)이 오른쪽에서 잘림 → 서랍 폭에 맞게. +- 정함(브레인): 항목 폭 = 서랍 안쪽 폭(테두리 · 둥근 모서리 다 보임 · 좌우 여백 같게 · 가로 스크롤 없음) · 글이 길면 줄임표 · 밝음 · 어두움 · 펼침 · 접힘 · 대시보드 · 시스템 설정 쪽 서랍도 같은 규칙. +- [x] 437-1 — 확인: 시험(서랍 CSS 시험 있으면 통과) + 화면 한 장씩(밝음 · 어두움 · 항목 오른쪽 테두리 보임). + - 검증완료 — 까닭 = 진행 단계 단추 폭 100 % 가 서랍 폭 auto 를 이김 · 선택자 보강 · 긴 글 줄임표. 시험 test_device_drawer · 225_drawer_shortcuts 8 통과 · typecheck · 화면(B07 · B01 · B05 · M02): 단추 좌우 여백 8 · 8 · 서랍 가로 넘침 0(scrollWidth 238 = clientWidth) · 밝음 · 어두움 · 긴 글 줄임표 · 검증 대기. + +## 438. 초기 종단 — R 500 넘는 구간 직선화 (요구 262 · 265 · sub3 · Opus high) + + +- 사용자 확정(265): 처음 종단 = 최적 계획선을 찾은 뒤 R 이 500 을 넘는 꺾이는 점들(L 20 기준 기울기 차 4 % 미만)을 앞뒤 R 을 보고 직선화 · 초기값(자동설계 체인 · 추천 [적용] · 노선 저장 때 새로 생긴 구간)에만 · 그 뒤는 사용자 몫 · 기본 L 20 · 경고는 둠. +- 정함(브레인): 432-1 「곡선 없음 · 높이 그대로」(no_curve_keys)와 열쇠 고르는 순서 버그 걷음(모서리 원인 · 분석 = 에이전트 재현 15 · 8 개 최대 10 %) · 직선화 = 연속한 R > 500 꼭짓점 묶음의 앞뒤 경계(R ≤ 500 진짜 꺾임 · 시종점)를 잇는 직선 위로 안쪽 꼭짓점 높이를 옮김(종단 직선화 단추와 같은 규칙 · 426 직선 판정이면 곡선 없음) · 경계가 새로 R > 500 이 되면 다시(묶음이 안 바뀔 때까지 · 한도) · 파이썬 첫 계획선 · 균형 종단 ↔ TS 짝 · 거울 시험 · 관 옮김(427) 새 꼭짓점은 지반 종단이 아니면 지금 계획선 높이에 세움. +- [x] 438-1 — 확인: 시험(초기값 모서리 0 · R > 500 꼭짓점 0 · 직선 구간 안쪽 R 없음 · 손 편집엔 안 걺 · 노선 저장 이어받은 구간 그대로 · 짝) + 재현 수치(에이전트 프로젝트 넷 · 계획고 지반 차 · 절성토 전후) + 화면(새 초기값은 쓰기라 단위 시험 · 기존 프로젝트 종단 화면 모서리 없음). + - 검증완료 — 시험 167 통과 · 재현(에이전트 프로젝트 셋 12953f5a · dad81824 · 7c34ad71) 모서리 15 · 8 · 23 → 0 · R > 500 꼭짓점 13 · 8 · 27 → 0 · 계획고 목표 차 최대 0.50 · 0.38 · 1.24 m(평균 0.05 · 0.03 · 0.18) · 절토 +1 · +1 · +4 % · 성토 +0 · +3 · +9 % · 저장분 7c34ad71 모서리 30 → 0 · 화면(검증_sub3) 곡선 55 · 모서리 0. + +## 439. B06 카드 머리 줄 단추 반영 안 됨 (요구 266 · sub6 · Opus high) + + +- 원인(에이전트 재현 · 진짜 모듈 node): 387-4(6a3f9647f · 10-17) 뒤 카드 단추 → 계산 줄 횡단 차례 `savedCross`(`A00_Common/design/design_shared.ts:234-241`)가 저장 측점 목록 ≠ 계산 줄 측점(1 mm)이면 `detailCross` null 로 바로 돌아가 B06 카드 자료를 안 고침 · 오류 없음 · 오늘 관 옮김 · 측점 변경(428 · 415 · 407-1)으로 흔해짐 · 엔진 · 같은 측점 길은 정상. +- 정함(브레인): `savedCross` = 늘 `refreshCrossDesigns` 로 카드 자료 다시 셈 · 측점 대조는 돌려줄 값만(다르면 null → 계산 줄 엔진 길 그대로) · `refreshCrossDesigns(` 부르는 자리 하나 유지 · 덤 = 대체 길 `refreshFromServer`(`B06_Section_Cross_Refresh.ts:487-518`)에도 카드 선택(지반 · 측구 · 복합경사) 실음. +- [x] 439-1 — 확인: 새 `test_266_card_toggle_mismatch.py`(측점 같음 · 다름 둘 · 복합경사 · 측구 · 지반 바꿈 → 카드 선 · 면적 바뀜 · `savedCross` 내보내 진짜 코드로) · 365 · 384_4 · masshaul_single_source · 346_2 · b06_two_stage_slope_kept + 화면(검증_sub4 측점 어긋난 상태 · 카드 단추 줄 전부 · 되돌림). + - 검증완료(480e62c67) — 시험 63 통과 · 7 건너뜀 · typecheck 0 · 화면 검증_sub6(5181) 3+060 측점 같음 · 2 mm 어긋남 둘 다 단추마다 절토 4.212 → 4.504 → 2.697 → 토사 5.282 · 되돌림 4.212 · B05 다녀와도 유지 · 서버 저장 없음 · 세션 원래대로. +- [x] 433-15 사용자 결정(269-2) = 높이 한도 없음 · 초기 종단은 R 줄이고 기준만 잡음 · 판단은 사용자 몫. 옛 물음: — 초기 종단 직선화(438)로 추천 균형 종단은 작은 꺾임이 길게 펴져 계획고가 균형 종단에서 최대 1.24 m 벗어남(절토 +4 % · 성토 +9 %) · 직선화로 옮기는 높이에 한도(예 0.1 m)를 두고 넘으면 그 꼭짓점은 꺾임(곡선)으로 남길지(sub3). + +## 440. 구조물 횡단 · 내부 구조물 하이라이트 (요구 267 · sub7 · Opus high) + + +- 원인(에이전트 · node 재현): ① `ec28d9d45`(10-16 · 346-2 덧 3) 뒤 노선 초안 동안 B06 카드는 초안 상세(`shownDetail` · 옮긴 m 새 카드 번호 `B05_Profile_Pipeline_Detail.ts:178`)로 그리는데 클릭 · 목록 → 카드 · 넘김 · 풀기는 저장 상세에서 찾음(`design_view_cross.ts:118-124 · 381-387 · 471 · 490`) → 옮긴 구조물 측점 카드만 못 찾고 고름 통째 풂 ② B06 위 평면 패널 빈 곳 누름이 B06 고름까지 풂(`RouteEdit_Pointer.ts:220` → `StructureMarks.ts:335-340` → `Pick_Sync.ts:84`) ③ B06 좌측 목록이 보이는 동안 관 · 구조물 자리 바뀜을 안 따라감(`design_view_cross.ts:567` 카드만 · `Structures_Panel.ts:372` load 때만) ④(추정) 암 경계선 누름 범위(10 px)가 구조물 아랫부분 위에 놓임(`Design_Pick.ts:514-527` · `Pick_Order.ts:72-74`). +- 정함(브레인): ① 「지금 그린 상세」 한 칸 → 찾기 넷 모두 그것으로 · 초안 카드도 같은 측점 열쇠면 저장 카드 번호 이어 씀 ② 평면 패널 빈 곳 누름은 평면 마커가 고른 것만 풂(B06 에서 고른 것 그대로) ③ 바뀜 신호에서 B06 목록도 다시 실음 ④ 재현되면 구조물 누름 우선 · 고름은 구조물 id 우선 · 강조는 구독 하나에서 다시 칠함 · 덤 = `test_191_1` 도우미 stub(`./B06_Section_UI_Cross_Design_Pick`). +- [x] 440-1 — 확인: 새 끝에서 끝 시험(노선 초안 중 구조물 카드 누름 → 카드 · 폼 · 목록 줄 · 알약 · 평면 마커 · 구조물 그림 누름 같은 목록 · 초안 버린 뒤 같음 · 모든 카드 번호가 찾기 상세에 있음) · 399 · 409 · 411_a · 233 · 270 · 150 · 191_1 + 화면(검증_sub7 · 교점 끌기 초안 → B06 구조물 카드 · 벽 · 관 그림 누름 · 평면 패널 빈 곳 누름 · 밝음 · 어두움 · 되돌림). + - 검증완료 — test_440 새 7 · 고친 대상 시험 458 통과(384_3 은 고치기 전부터 실패) · typecheck · 화면: 초안 관 카드 번호 = 저장 번호(351000 · 361 m) · 카드 누름 = 카드 · 목록 줄 · 알약 · 고름 364 m · 다시 누름 풂 · 벽 누름 = 조정창 · 평면 빈 곳 누름 B06 고름 그대로 · 암 경계 판정이 구조물 덮은 자리 40 % → 0 · 밝음 · 어두움 · 되돌림 초안 버림. 평면 마커 누름만 예외(440-3). +- [x] 440-3 ⬜ 노선 초안 중 B06 위 평면 마커 누름 = 옛 자리(351 m) 고름 — 숨은 종단 보기 마커 목록 · 관 id 장부(`pipe-s1@351`)가 초안 자리를 안 따라감(`design_view_profile` onPipesChanged · followFacilities 숨김 때 건너뜀) · B06 은 따로 `pipe-s2@361` 지음. 고치기 전부터. → 고쳐짐 확인(요구 334 · 451 · 462). +- [x] 440-4 ⬜ 노선 초안을 되돌리거나 둔 채 새로고침하면 횡단 캐시가 초안 측점(361)에 남고 관 제원이 옆 일반 측점(360) 카드로 붙음 · 새로고침 때는 구 구조물 이관(`design_view_profile_sections` migrateLegacyStations)이 초안 관 측점(364)을 「기타 구조물」로 서버 `structures.json` 에 씀([저장] 없이). 고치기 전부터 · 검증_sub7 은 파일 지워 되돌림. → 고쳐짐 확인(요구 334 · 451 · 452). +- [x] 440-2 사용자 결정(269-3) = 보류(지금 그대로). 옛 물음: — 카드 고름은 형상을 안 켜고 범위 테두리도 끔(137-4) · 벽을 눌러도 범위 테두리 안 켜짐(10-09~) — 예전 요구 41-3(형상 누르면 범위 카드 전부)과 다를 수 있음. +- [x] 433-16 새 탭 첫 화면 B06 3+060 이 서버 값(단경사 · 측구)과 다른 세션 캐시 값으로 열린 적 있음(캐시 출처 모름 · 지우니 서버 값 · 268-3 저장 누락 조사와 같이 봄 · sub6). → 고쳐짐 확인(요구 334 · 451). + +## 441. 스냅 끌기 측점 밖 · 유토 · 사면 이동 확인 (요구 268-1 · 2 · 4 · sub1 · Opus high) + + +- 원인(에이전트 · 진짜 모듈 node 재현): ① 스냅 맞춤의 교점 이동 한도가 간격의 절반(`logic/B05_Profile_RouteEdit_StationFit.ts:116` reach = intervalM/2 · 20 m 면 ±10 m) → MC 가 두 측점 한가운데쯤(18+9 ~ 19+1)이면 못 맞추고 그 자리 받아들임(430 전에도 같음 · 1,080 회 끌기 89 회) ② 유토곡선 · ④ 사면 이동 = 439 와 같은 뿌리(`savedCross` 측점 어긋나면 카드 · 유토 안 고침 · 439 로 풀림 · 480e62c67) · 덤 = 초안 없는 저장 노선에서 계산 줄 측점 단계가 저장 스냅 설정을 무시(`design_pipeline_stations.ts:61-62` · `design_pipeline_page.ts:304-305` `route?.stationSnap ?? false`) → 스냅 켠 노선이면 측점 목록이 늘 어긋남. +- 정함(브레인): ① reach = intervalM(목표는 가장 가까운 측점 하나 그대로) · 끌기 미리보기에서 측점 밖 곡선 수가 끌기 전보다 늘면 그 걸음 되돌림(하한 막힘과 같게 · 못 맞추는 자리로 못 끎) · 433-14 `dragMoved` 를 막힘 검사 뒤로 ② 초안 없을 때 계산 줄 측점 단계가 저장된 station_snap · station_snap_step 따름 ③ 시험 단언 = 측점 어긋난 상태에서 단추 · 사면 한 걸음 → refreshCrossDesigns · 유토 다시 그림 한 번. +- [x] 441-1 — 확인: 시험(390_5 끌기 훑기 = 놓은 뒤 측점 밖 0(고정 R) · 366_3 · 430 · 408 · 383_2 · 266 유토 · 사면 단언 · 384_4 · masshaul_single_source · 354_2 · 346_2 · 370_2 · 417 · 139_6) + 화면(측점 No. 끌기 19+0 → 놓은 뒤 MC 측점 배수 · B06 사면 이동 · 유토 바로 바뀜 · 되돌림). + - 검증완료 — 시험 117 통과(7 건너뜀 = 검증_sub7 없음) · 390_5 훑기 216 회 놓은 뒤 측점 밖 0 · 화면 교점 끌기 64 회 측점 밖 0 · 되돌림 64 회 원래 길이 · 방향키 20 m 걸음 못 맞추는 자리 막힘 · 사면 이동 걸음마다 유토 0.3 초 안 바뀜(97b5a7869 · 검증 대기). + +## 442. [저장] · [확정] 누락 — 분석 (요구 268-3 · 브레인 · 에이전트) + + +- [x] 442-1 분석 — `docs/raw/조사/2026-10-18_442_요구268_저장누락.md`(H1~H6 · M1~M7 · 묶음 443~446 · M4 사용자 결정). +- [x] 442-2 사용자 결정(269-1) = [저장] 때 영구저장(설계속도 · 지형 구분 = 종단 표 경고값 · 시종점 계획고 조정 = 결과에 씀) — 절 448 에서 고침. 옛 물음: B05 페이지 설정(설계속도 · 지형 구분 · 기준값 · 시종점 계획고 조정 · 시작 측점)을 [저장] 대상으로 할지 · 읽기 전용(프로젝트 설정에서만)으로 할지. + +## 443. 저장 누락 ① 구조물 실패 · 상단측 재전송 · 확정 하위 실패 (H6 · M3 · M6 · sub4 · Opus high) + + +- [x] 443-1 — 확인: 왕복 시험 + 화면(구조물 409 실패 → 멈춤 · 초안 남음 · 상단측 저장 뒤 세션 빔 · 확정 하위 실패 알림) · 백업 · 되돌림. + - 검증완료 — test_443 9건 · 관련 시험 82건 · typecheck 통과 · 5179 화면 [저장] · [확정] 구조물 409 = 구조물 차례 멈춤 · 초안 남음 · 상단측 성공 뒤 세션 빔 · 두 번째 [저장] 안 보냄(B05 · B06 길) · failed_parts = 상단측 차례 멈춤 · 행 7표 · json 228개 해시 되돌림 같음. + +- [x] 443-2 노선 바꾼 [저장] 때 기본 창구가 옛 누가거리 상단측(uphill)을 새 노선에 보냄(sub4 찾음 · 엉뚱한 측점에 얹힘) — 노선 바뀐 저장이면 상단측을 측점 열쇠로 옮겨 싣거나(옮김 목록) 못 맞추면 빼고 알림 · 비정규 측점 횡단 실패로 [저장] 멈춤 = 그대로(브레인 확인) · sub4 · 확인: 시험 + 화면. + - 검증완료 — test_443_2 4건 · 관련 시험 100건 · typecheck 통과 · 5179 화면 교점 끌기 → [저장] = 상단측이 노선 저장 뒤 · 횡단 저장 앞에 새 측점으로(관 351 → 350 m · 40 · 1080 그대로) · 못 맞춘 2곳 알림 · 새 종단 350 m 좌(user) · 행 11표 · 파일 242개 해시 되돌림 같음. + +## 444. 저장 누락 ② 관 구간값 (H4a · H4b · sub5 · Opus high) + + +- [x] 444-1 — 확인: 왕복 시험(구간값 → 관 5 m 옮김 · 교점 끌기 → [저장] → 새 탭 같은 값 · 두 번째 [저장] 뒤 같은 값) + 화면 · 백업 · 되돌림. + - 고침(B 승인) — 세월교 · BOX 폼 값을 culvertopt 에 안 쌓음(관 초안 한 벌) · 옛 예약은 측점 옮김 목록에 · 못 맞춘 값 버림 · 기슭막이 구간값은 이미 폼 → 관 초안(H4b 재현 안 됨). + - 검증완료 — test_444 4건 · 관련 시험 103건 · typecheck 통과 · 5180 화면 관 길이 15 · 관 5 m 옮김 → [저장] → 새 세션 356 m · 15 · 두 번째 [저장] 15 · 세월교 월류 폭 10.5 · 5 m 옮김 · 교점 끌기(364 m 따라감) · 두 번째 [저장] · [확정] 모두 10.5 · culvertopt 안 생김 · 행 7표 · 파일 314개 해시 되돌림 같음. + +## 445. 저장 누락 ③ 횡단 patch 바탕 · 노선 바꾼 저장 · 집수정 범위 · 버린 수 (H2 · H3 · M2 · H5 · M1 · M5 · M7 · sub6 · Opus high) + + +- [x] 445-1 — 확인: 왕복 시험(벽 둘 저장 뒤 하나만 고쳐도 다른 벽 남음 · ↺ · 추가 벽 0 저장 · 관 옮긴 측점 메모 · 조절 · 지반 남음 · 노선 바꾼 저장 뒤 지반 · 암선 · 표준 횡단면 남음 · 집수정 2.1 막힘 · 버린 수 알림) + 화면 · 백업 · 되돌림. + - 검증완료 — test_445 9건 · 관련 시험 424건 · typecheck 통과 · DB 저장 행 1450개 새 patch 꼴 스키마 통과 · 5181 화면: 새 탭 유출만 ▶ [저장] → 유입 x 1.0 · 단 수 · 메모 · 폭 남음 · ↺ · 추가 벽 − · 빈 전체 폭 → 저장 전 새로고침 → [저장] → 유출 지움 · 단 0 · 폭 0 · 관 351 → 356 [저장] → 흙 · 메모 · 벽 셋 그대로(B06 관 폼 id 빠짐 함께 고침) · 교점 끌기 [저장] → 새 노선 노견 0.6 · 풍선 · 암선 −0.4 · 암 경사 0.6 · 지반 흙 · 관 메모 · [확정] 같은 값 · 버린 수 API 777.77 응답 · 2.1 → 422(화면 2.0 자름) · 행 7표 · 파일 313개 해시 되돌림 같음. + +- [x] 445-2 ⚠ 교점 끈 뒤 [저장] · [확정]마다 노선 저장 체인이 다시 돎(노선 번호 378 → 414 → 416 → 417 · [확정]이 횡단 확정까지 못 감 = 확정 막힘 · sub6 찾음) — 노선 저장 성공 뒤 노선 초안을 저장본으로 맞춰(또는 비워) 다음 [저장] · [확정]이 노선 차례를 건너뜀 · 노선 바뀐 [확정]은 한 번 더 누르면 끝까지 · sub6 · 확인: 시험(교점 끌기 → [저장] → [저장] = 노선 저장 한 번 · [확정] 두 번째에 단계 완료) + 화면 · 백업 · 되돌림. + - 검증완료 — 까닭 = 노선 저장 뒤 페이지가 다시 서며 평면 판이 접혀 편집기가 떠나도 노선 저장 등록부에 옛 편집기(「고친 것 있음」)가 남음 → 떠날 때 풂 · 고정만 바꾼 걸음은 노선 그대로 · test_445_2 4건 · 관련 시험 227건 · typecheck 통과 · 5181 화면: 교점 끌기 [저장] → 노선 저장 한 번 → 두 번째 [저장] 노선 저장 없음 → [확정] 한 번에 횡단 단계 완료 · 끈 뒤 바로 [확정] = 노선 저장 + 안내 → 두 번째 [확정] 단계 완료 · 고정만 = 노선 저장 없음 · 스냅 켬 간격 바꿈 = 곡선 MC 자리 바뀜이라 노선 저장(되돌리면 없음) · 행 7표 · 파일 313개 해시 되돌림 같음 · 종단 판 접힘 취향 되돌림. + +## 446. 저장 누락 ④ 카드 폭 넘김 다시 만들기 (H1 · sub8 · Opus high) + + +- [x] 446-1 — 확인: 시험(다시 만들기 뒤 측점 설계 · 옵션 · 표준 횡단면 · 유토 풍선 · 계획고 편집 그대로 · 확인창) + 화면(카드 폭 ▶ 21 m → 확인 → 새 탭 같은 값) · 백업 · 되돌림. + - 검증완료 — test_446 5 · 173_6 · 342_2 · 346_3 통과 · typecheck · 검증_sub8 카드 폭 71 m(표본 70 m) 확인창 취소 = 그대로 · 다시 만들기 9 s → 새 탭 · 두 번째 [저장] · [확정] 뒤 57 측점 사용자 칸 차이 0 · 표준 횡단면 · 곡선 편집 · 계획고 57 같음 · 행 · 파일 해시 되돌림 같음. +- [x] 433-17 ⚠ 440-4 — 새로고침 때 옛 구조물 이관이 「기타 구조물」을 서버 structures.json 에 씀(저절로 쓰기 · 자료 오염) · 초안 되돌림 · 새로고침 뒤 캐시가 초안 측점에 남아 관 제원이 다른 카드로 · 440-3 초안 중 평면 마커 누름 = 옛 자리(숨은 종단 보기 관 id 장부) · 384_3 시험은 440 전부터 실패(sub7) — 다음 장 맨 앞. → 안 생김 확인(요구 334 · 5478eb1f8). +- [x] 433-18 측점 열쇠 목록(계산 묶음 · 새 상세)에 종점(EP) 측점이 없어 종점 고침이 노선 저장 때 옮김 칸(at:)으로 빠짐(알림은 뜸 · sub4). → 고쳐짐 확인(요구 334 · 452). +- [x] 433-19 ⚠ B06 폼 편집 뒤 관 초안에서 관 id 빠짐(draft [null, 351]) — 노선 바뀜 때 관 id 짝(411-B)에 영향 가능 · 먼저 재현 · Span_Control.update(기준벽 구간 → culvertopt)는 화면에서 안 불림(다단만 · 죽은 길 · sub5). → 안 생김 확인(요구 334 · 48a376f21). +- [x] 433-20 B06 집수정 내공 줄이 화면에서 늘 숨김(54-40 · 사용자 길로 내공 못 고침) · CAD 칸 2000 엔티티 넘으면 422(추정) · 같은 탭 새로고침 뒤 ORCA 누름 안 닿음(시험 도구 · sub6). → 고쳐짐 확인(요구 334 · ② 450 · ① 450 정함대로 · ③ 도구 흠). +- [x] 433-21 곡선 손잡이(BC · EC) 끌기는 스냅 미리보기 · 측점 밖 막힘 없음(놓은 뒤 측점 밖 1 남은 적) · 방향키 측점 No. 20 m 걸음이 못 맞춤 막힘에 자주 걸림 · 구조물 마커가 겹친 교점은 마커가 먼저 집혀 교점 못 끎(409 차례 · sub1). → 고쳐짐 확인(요구 334 · 453 · 454). + +## 447. 요구 263~268 마무리 (브레인) + + +- [x] 447-1 합치기 · 묶음 다섯 · typecheck · 장 시험. +- 검증완료(447) — 435~446 · 443-2 · 445-2 · 436-2 메인 합침(030409f16) · 깃 싱크(전역 아님 · 열세 폴더 22eff5b85 · 장 시작) · 서버 묶음 다섯 · typecheck 0 · 장 시험 86 파일 666 통과 · 창마다 화면 확인 · 쉬는 창 여덟 /clear · 탭 0 · 남은 결정 = 442-2(B05 페이지 설정 저장 여부) · 433-15(직선화 높이 한도) · 440-2(구조물 범위 테두리 규칙) · 다음 장 후보 433 · 검증 대기. + +## 448. B05 페이지 설정 [저장] · [확정] 영구저장 (요구 269-1 · 442-2 · sub6 · Opus high) + + +- 근거 = `docs/raw/조사/2026-10-18_448_요구269_후보재검토.md` 2장. +- 정함(브레인): 세션 캐시 `pagesettings` · 저장 차례 `settings`(route 뒤 · alignment 앞 · 기본 창구 · B05 · B06 모두) · 서버 `PUT /api/projects/{id}/route/page-settings` = stage 2 params 병합 + 종단 정책 · criteria 갱신 뒤 다시 셈(종횡단 다시 만들기 없음 · DB 열 추가 없음) · 시종점 계획고 조정 = 첫 · 끝 측점 계획고 편집 · 시작 측점 = 저장 · B05 표시 전용(열쇠 · 다른 페이지 라벨에 안 섞음) · [초기화] = 스냅샷에 stage 2 params 뜨고 되돌림 · 샘플 간격 두 칸 = 읽기 전용 · 횡단배수 최소고 강제 = 저장 · E1(재설계 요청이 설계속도 · 최소고 강제 넘김) · E2(B06 재생성 지형 = 저장값 우선) · 추천 저장본 열쇠에 설계속도 · 지형. +- [x] 448-1 — 확인: 새 `test_442_2_page_settings.py`(병합 · 정책 갱신 · 기하 그대로 · E1 · 스냅샷 왕복 · 저장 차례) · 거울 `test_442_2_grade_limit_mirror.py`(TS 기준표 ↔ 파이썬 전수) · `test_b05_design_speed` · `test_346_3_route_save` + 화면(설계속도 30 · 지형 · 시종점 조정 · 시작 측점 바꿈 → [저장] → 새 탭 같은 값 · 종단 표 경고 바뀜 · [확정] · [초기화] 되돌림 · 노선 바꾼 [저장] 뒤도) · 백업 · 되돌림. +- 검증완료(448) — 시험 19 + 거울 3 + 관련 저장 · 계획선 시험 통과 · typecheck 0 · 검증_sub6 화면: 30 · 일반 → 경고 34 → 43(14 → 8 %) · 표 라벨 12+0(평면 0+0 그대로) · 새로고침 · 새 탭 같은 값 · [저장] = params 병합(단계 그대로) · 기준 8 % · R 250 · 시점 +0.5 · 특수 → 12 % · 평면 R 20 · [확정] 40 → 10 % · R 450 · [초기화] = 설정 칸 걷힘 · 14 % · 편집 없음 · 노선 바꾼 [저장] 두 번(새 노선 424 · 425) 설정 유지 · 빈 칸 = null · 밝음 · 어두움 · 행 7표 · 파일 해시 되돌림 · 덧 고침 = `AlignmentPolicy.from_dict` 평면 R 읽기(계획고 저장마다 0 되던 흠 · sub3 알림) · `_road_settings` 가 params.options 읽음 · 검증 대기. + +## 449. B05 [저장] 관 목록 · 노선 저장 뒤 실패 (433-7 · 433-12 · 433-6 · sub4 · Opus high) + + +- 정함(브레인): 관 정본 PUT = 세션 관 초안 한 번만(배수판 메모리 다시 PUT 걷음) · 빈 목록 PUT 은 사용자가 관을 다 지운 때만(판 안 섬 · 실패 = 보내지 않음) · 노선 저장 성공 뒤 다른 차례가 실패하면 0 칸 계획고 → 새 노선 칸 · carryStationDrafts 뒤 rebuild · 관 PUT 측점 맞춤 실패는 응답에 실어 알림 · 시작 전 검증_sub4 missing-stations 로 [측점 만들기](433-6). +- [x] 449-1 — 확인: 시험(B06 관 고침 직후 [저장] = 세션 초안 값 · 판 안 선 [저장] 관 수 그대로 · 노선 저장 뒤 횡단 차례 실패 → 다음 [저장] 0 칸 계획고 나감) + 화면 · 백업 · 되돌림. + - 검증완료 — `test_449_save_pipes` 8 · 이웃 저장 시험 128 통과 · typecheck 0 · 5179 검증_sub4 [측점 만들기] 뒤 빠진 측점 0 · 초안 고친 직후 [저장] = PUT 1번 · 관경 800 저장 · 초안 없는 [저장] = PUT 0 · 관 2개 그대로 · 초안 두고 B05 로 옮겨 [저장] = 600 저장 · 알림 밝음 · 어두움 보임 · DB 7표 · storage 해시 되돌림 같음 · 노선 저장 뒤 실패는 시험만(화면 노선 저장은 안 함) (33201b14e). + +## 450. B06 측점 갈아끼움 · 죽은 길 · CAD 한도 (433-4 · 433-11 · 433-19 · 433-20 · sub5 · Opus high) + + +- 정함(브레인): 상세 갈아끼움이 curveMoves 거꾸로 맵을 대체 열쇠로(MC 곡선 측점 R 바꿔도 설계 · 칸 따라감) · 자리 같은 앞 단면은 prior 지반 표본 · 상단측 · 중심고 유지(덧 측점 뒤 누가토량 = 서버 값) · `Span_Control.update` 죽은 길 지움 · CAD 2000 넘음 = 화면에서 막고 알림(내공 줄 숨김은 그대로). +- [x] 450-1 — 확인: 새 `test_433_4_mc_swap.py`(MC 설계 남음 · moves 짝) · 새 `test_433_11_plus_station_masshaul.py`(덧 측점 넣기 · 빼기 뒤 누가토량 브라우저 = 서버 · 0.1 ㎥ 안) · 444 · 445 · 266 · masshaul_single_source + 화면 · 되돌림. + - 검증완료 — 새 시험 11(433_4 · 433_11 · 433_19_20 · 옛 코드에선 5 실패) · 이웃 시험 120 통과(24 건너뜀 = 검증_sub7 없음) · typecheck 0 · 346_2 단언 바꿈(자리 같은 단면 = 앞 표본) · 화면(검증_sub5 B05): EP −17,570.7 → 관 6+10 넣음 −17,621.4 → 뺌 −17,570.6(서버 −17,570.7 · 절 · 성토 0.1 · 0.2 ㎥ = 다시 셈 엔진 몫) · 저장 안 함 · 초안 지움 · 433-4 화면은 이 노선에 MC 측점 없어 node 시험만 · 433-20 화면 알림은 2000 요소 손 입력 불가로 글 시험만. + +## 451. B06 세션 캐시 판 · 새로고침 hold · 숨은 관 id 장부 (433-16 · 440-4 · 440-3 · 384_3 · sub7 · Opus high) + + +- 정함(브레인): 세션 section-detail 에 서버 판(지문) 붙임 · 다르면 캐시 사용자 칸만 얹고 나머지 서버 값 · 새로고침 hold 는 초안 열쇠로 옮겨진 칸을 처음 값으로 안 뜸 · 숨은 종단 보기도 관 id 장부 돌림 · test_384_3 단언 = 427 의도(pvi 6). +- [x] 451-1 — 확인: 시험(낡은 캐시 + 다른 탭 저장 → 새 탭 서버 값 · 사용자 칸만 · 초안 둔 채 새로고침 → 관 제원 제 카드 · 초안 중 평면 마커 누름 = 새 자리) · 440 · 445 · 384_3 + 화면 · 되돌림. + - 검증완료 — 새 test_451_session_canon 5 · test_451_refresh_hold 5 · 관련 303 통과(56 건너뜀 = 옛 검증 프로젝트 없음 · 433-2) · typecheck 0 · ORCA 검증_sub7: 세션에 낡은 메모 심고 새로고침 → 캐시 · 세션 · [저장] 바탕 = 서버 값 · B06 에서 초안 옮김 → 관 id 장부 pipe-s1 365 따라감 · 초안(관 351 → 360) 둔 채 새로고침 → 버림 = 관 초안 비움 · 351 관 카드 · 351 선택(암 · 좌절토) 그대로 · 기록 saved · 정본 파일 해시 그대로 · 심은 세션 값 지움 · 탭 닫음. + - [x] B06 화면에서 노선 초안 버림이 뒤 cross 입력에 밀려(dropped) 초안 전 상세로 안 돌아옴(원래 코드도 같음) — 밀리면 마지막 차례 끝에서 되돌림 · 밀어낸 차례도 조용히. + - 검증완료 — 새 test_451_drop_cross 3(옛 코드 = 실패 재현) · 관련 310 통과(56 건너뜀) · typecheck 0 · ORCA 검증_sub7 B06 같은 탭 · 새로고침 뒤 버림 = 기록 dropped → saved · 351 관 카드 · 선택 그대로 · 관 초안 비움 · 정본 해시 그대로. + - ⬜ 잔여: 새로고침 뒤 B05 를 한 번도 안 연 채 B06 에서 버리면 관 id 장부에 초안 자리 헛 기록(pipe-s1@360 · s2@369)이 남음 · B05 를 열면 걷힘. + +## 452. 서버 — 구 구조물 이관 · 옛 횡단 파일 · 시종점 열쇠 (433-17 · 433-10 · 433-18 · sub8 · Opus high) + + +- 정함(브레인): 이관은 [저장] 없이 쓰지 않음 · 서버가 본문 버리고 저장 종단 파일 직접 읽음 · 관 PUT 끝에 옛 횡단 파일 정리 · 시종점 열쇠 우선순위 한 규칙(화면 · 서버 같게) · EP 행을 irregular 로 갈음 안 함 · 거울 344_3. +- [x] 452-1 — 확인: 시험(초안 둔 채 새로고침 → structures.json 안 바뀜 · 관 옮김 PUT 뒤 옛 cross 파일 없음 · EP 고침 → 노선 저장 뒤 EP 에 남음) · 344_3 + 화면 · 백업 · 되돌림. + - 검증완료: test_452 7 · 관련 36 파일 206 통과 · typecheck 0 · 검증_sub8 화면(초안 꼴 본문 이관 0 · structures.json 없음 · 관 351→364 PUT 뒤 cross_00351 지워짐) · 행 7표 · 파일 254 해시 되돌림 같음 · EP 행 종류 갈음은 그대로 둠(열쇠는 자리 규칙으로 end:EP · 종류 바꾸면 TS 소비처 24곳 흔들림) · 검증 대기. + +## 453. 평면 집기 · 손잡이 끌기 · 스냅만 바꾼 초안 (433-14 · 433-21 ① ③ · 433-1 · sub1 · Opus high) + + +- 정함(브레인): 노드 가운데 6 px 만 노드 우선 · 그 밖은 가까운 것(손잡이 · 마커) · 맴돔 커서 같은 판정 · 손잡이 끌기 = 노드 갈래와 같게(미리보기 맞춤 · 측점 밖 늘면 되돌림) · 맞춤 안 된 기준에서 막힌 걸음 미리보기 endDrag 되돌림 · 스냅만 바꾼 뒤 되돌려도 초안 dirty 판정 · test_365 ⑧ 이름. +- [x] 453-1 — 확인: 390_5 훑기에 손잡이 끌기 · 381_3 · 409 · 399 · 441 · 365 · 스냅 바꿈 → 되돌림 → 초안 있음 + 화면(낮은 확대 R 12 손잡이 · 마커 겹친 교점 끌기) · 되돌림. + - 검증완료 — 손잡이 끌기 훑기 216 번 놓은 뒤 측점 밖 0(되돌림 없으면 20) · 맞추지 않은 기준 막힌 걸음 놓음 13/13 → 0 · 화면(검증_sub1 · 낮은 확대) 노드에서 9 · 11 px = 손잡이(옛 = 노드) · 0 · 5 · 7 px = 노드 · 마커 9.8 px 겹친 교점 6 px 누름 = 교점 · 끌기 「옮기는 중」 · 손잡이 90 걸음 끌기 측점 밖 0 · 스냅 간격만 바꾸고 끌기 → 되돌리기 = 초안 있음(안 바꾸면 null) · 어두움 같은 판정 · 세션 · 로컬 저장 되돌림 같음(DB 안 씀) · 시험 test_453 5 + 관련 38 파일 289 통과 · typecheck 0 · 346_1 「편집기 다리」 가짜 사진첩 고침 · 384_3 1 실패 = 이 작업 밖. + +## 454. 방향키 측점 걸음 맞춤 · 안 쓰는 유토 단계 걷음 (433-21 ② · 433-3 · sub2 · Opus high) + + +- 정함(브레인): 맞춤 = 곡선마다 내림 · 올림 두 후보 + 뒤 곡선 앞보기(366_3 · 390_5 · 441 단언 유지) · 계산 줄 masshaul · haul 단계 걷음(쓰는 벌 · createHaulPlanPrefetch · earthwork() cross 다시 먹이기 · postHaulPlan 남김) · 탐침 시험 7 고쳐 씀. +- [x] 454-1 — 확인: 무작위 노선 20 m 걸음 막힘 수 줄어듦(전후 수치) · 366_3 · 390_5 · 441 · 344_3 · 344_4 · 346_1 · 346_2 · 365 · 유토 곡선 그대로 + 화면(방향키 20 m · 유토 즉시) · 되돌림. + - 검증완료 — 무작위 노선 30 개 20 m 걸음 측점 밖 막힘 141 → 25 · 놓은 뒤 측점 밖 43 → 0 · 화면(검증_sub2 · 같은 출발 64 누름) 측점 밖 막힘 옛 6 → 새 1 · 노선 4 걸음 흙 배분 POST 0 · 유토곡선 판 새 누가토량 · 되돌리기 원상 · 시험 186 통과 · 346_1 「편집기 다리」 1 실패 = 445-2 `watch` 판정 변경 뒤 남은 것(이 작업 밖). + +## 455. 종단 — 관 옮김 이웃 · ▲▼ 자동 R · 폴백 첫 종단 · 옛 정책 경고 (433-5 · 433-13 ① ② ③ · 433-9 · sub3 · Opus high) + + +- 정함(브레인): 관 옮김 = 바로 앞뒤 이웃(사용자가 높이 고친 꼭짓점 뺌)도 맞춤 · 목표 = 옮기기 전 그 측점 계획고(TS ↔ 파이썬 짝) · ▲▼ = 자동 R(사용자가 안 넣은 값)이면 지워 기본 L · 사용자 R 은 둠 · 관 정착 · 직선 분할 폴백 첫 종단도 직선화(관 꼭짓점 hold) · 옛 정책 빈 법정 최소 R · L = 설계속도 법정값 · 433-9 화면 다시 잼. +- [x] 455-1 — 확인: test_427_1(이웃 계획고 차 < 0.01 m) · 438 · 432 · 426 · 거울 + 화면(관 옮김 이웃 · ▲▼ · 옛 종단 초안 경고) · 되돌림. + - 검증완료 — 관 351 → 356 이웃 뜸 0.25 m → 0.000 m(지반 · 균형 종단 · 이웃이 1 mm 넘게 뜨는 만큼 번져 맞춤) · 관 정착 폴백 R 723 · 540 → 500 이하(여유로 들린 관 꼭짓점은 경계로 그대로 · 브레인 답 A) · 화면(검증_sub3 관 389 → 394) 이웃 380 · 400 차 0.0000 m · [저장] 뒤 서버 계획고 = 초안(394 852.5114 · 433-9 고쳐짐) · 옛 정책(최소 R · L 0) 초안 「종단곡선 미달」 21 건 = criteria 100 · 20 · 되돌리기 원상 · 시험 61 + 연관 81 통과 · DB 행 · storage 해시 되돌림 같음 · 384_3 1 실패 = 451 몫(이 작업 밖). + +## 456. 요구 269 마무리 (브레인) — (일부 · 남은 줄은 PLAN.md) + +- [x] 456-1 합치기 · 묶음 다섯 · typecheck · 장 시험 · 433 남은 것(433-2 픽스처 · 433-13④ 화면 확인) 다음 장. +- 검증완료(456) — 448~455 · 451 덧(finishDrop) 메인 합침 · 충돌 없음 · 서버 묶음 다섯 · typecheck 0 · 장 시험 65 파일 461 통과 · 14 건너뜀 · 창마다 화면 확인 · 메인 서버 다시 켬 · 검증 대기. + +## 457. 노선 바뀜 — 초안 카드 그림 · 횡단 맥락 다시 얹기 · 가게 갈림 · 차례 짝 (요구 270 · sub7 · Opus high) + + +- 근거 = `docs/raw/조사/2026-10-18_457_요구270_구조물따라감.md`(원인 1 · 2 · 3 · 4 · 규칙 3장). +- 정함(브레인): 초안 상세도 캐시와 같은 `attachShapes` 를 follow 뒤 가게 값으로 부름 · `atChainage` 지움 · `specs` = 카드 번호만 · 이름 = `planStations` 제목 · 횡단 맥락(포장 · 기울임 · 하강) = 다시 얹은 그림에서 · carried = 사용자 칸만 · 짝 = 등록 열쇠(`registeredKeys`) · 차례 짝 지움 · `writeFacilities` = 지금 가게 값과 견줌(되돌리기 뒤 같은 조작도 씀). +- [x] 457-1 — 확인: node 끝에서 끝(재현 A · E · F · G · H · 되돌리기 뒤 같은 방향키 · 모든 측점 카드 그림 = 캐시 그림 = 주인 · 시설마다 제 측점 하나 · 엇갈림 0) · 410 · 411_b · 440 · 445 · 451 + 화면(분석 5장 1~11 · 14). +- 검증완료(457-1) — `test_457_draft_card` 12(옛 코드 12 실패) · 묶음 · 따라감 · 갈아끼움 시험 41 파일 258 통과 · typecheck 0 · 화면(검증_sub7 · 교점 끌기 +19.9 m) 배관 17+11 → 18+9 · 카드 그림 · 이름 = 다시 얹음 차이 0 · 캐시 차이 0 · 번호 겹침 0 · 되돌리기 뒤 같은 끌기 · 다시하기 · 초안 둔 채 새로고침 B06 같음 · 세션 되돌림 · 서버 Node 묶음 안 닿음 · 검증 대기. +- [x] 457-2 — sub4(459) 추가 측점 따라감 부름 — follow 구독 한 줄 · 초안 버림 자리 한 줄(sub4 파일 올라온 뒤). +- 검증완료(457-2) — sub1 · sub4 · sub5 받은 뒤 typecheck 0 · 묶음 시험 41 파일 258 통과 · 458 · 459 시험 11 통과 · 검증 대기. + +## 458. 노선 바뀜 — B06 캐시 갈아끼움 · 주인 측점 거리 상한 (요구 270 · sub5 · Opus high) + + +- 정함(브레인): 갈아끼움에서 격자 아닌 자리면 `grid` 지움 · 이름 = 계획 제목 · 노선 초안 동안 그림 늘 다시 얹음(가게 초안 없어도) · 주인 측점 거리 상한 0.51 m(TS ↔ 파이썬 짝 · 넘으면 안 얹고 경고) · 시종점 밖으로 밀린 시설 = 시종점 측점에 안 얹음 · 「노선 밖」 경고 · B08 수량 대조(같은 값). +- [x] 458-1 — 확인: 거울 `test_323_4_attach_mirror` 확장(상한 · 연동 폭) · node(재현 A · D) · 450 · 433_4 · 266 + 화면(분석 5장 2 · 3 · 5 · 7) · 457 합친 뒤 457 시험 다시. + - 검증완료 — test_458 6 · 323_4 거울 moved(상한 · 시종점 밖 · 연동 폭) · 299 같은 키 견본 주인 0.51 m 안으로 · 457 · 459 합친 뒤 관련 시험 392 통과(260 · 265 · 322_0 = 고치기 전부터 실패) · typecheck · 덧(sub7 쪽지): 떠난 측점 옛 자리에 새 측점이 서면 새 카드 번호 · 갈아끼움이 preview 표시 안 들고 감 · B08 대조 = storage 16 프로젝트 저장분 얹기 15 같음 · 1(검증_sub4) = 관 388 · 394 측점 없는 진행 중 자료(옛 규칙은 394 관을 400 측점에 붙임) · 화면(검증_sub5 · 노선 초안) 관 351 → 360 격자 G · 370 G 지움 · 제 측점만 그림 · 시점 밖 관 = 시점 카드 그림 · 이름 없음 + 알림 「노선 밖 1 곳」 · 물넘이포장 폭 24 주인 210 · 연동 200 · 213 · 220 · 초안 버림 뒤 세션 원상 · 저장 안 함 · 「묶음 다시 지음 필요」(common_util_culvert_sets · structure_attach). + +## 459. 노선 바뀜 — [저장] 구조물 맞춤 · 추가 측점 따라감 · 관 꼭짓점 세움 (요구 270 · sub4 · Opus high) + + +- 정함(브레인): `rebaseStructureDraft`(관 `rebasePipeDraft` 짝 · 따라가기만 한 것 = 서버 값 · 사용자가 옮긴 것만 초안 값) · 추가 측점 초안 없으면 PUT 안 보냄 · 추가 측점도 초안 동안 follow · 좌표 없는 옛 관은 옛 노선으로 좌표 먼저 채움 · 따라감 실패 알림 · 관 따라감 선 = 구조물과 같은 계통(추정 먼저 확인) · 노선 바뀜 때 옮긴 시설 측점에 427 관 꼭짓점 세움(초안 · [저장] 짝 · 요구 270 「종단 데이터 다시 생성」). +- [x] 459-1 — 확인: 거울 `test_410_follow_xy` · `test_344_2_route_pairs` 확장 · 서버 임시 storage(따라감 · _place_pipes · station_keys · carry_cross_inputs · attach_shapes · 옮긴 시설 측점 = 새 지형 표본 + 사용자 칸 · 그림은 제 측점만) · 427 · 455 · 449 + 화면(분석 5장 12 · 13 · 종단 관 꼭짓점) · 백업 · 되돌림. + - 검증완료(sub4) — 관 따라감 선 추정 맞음(B04 `_prepare` = 범위 안 자름 · 정본 388 · 394 대 종단 351 · 358) → `points` 로 · 옛 관 열쇠도 옛 노선 누가거리(관 측점 메모 351 → 350 넘어감 · 고치기 전 관 열쇠 0) · 초안 중 마커로 옮긴 관 427 = 서버 차례 짝(화면 검증_sub4 353 m 초안 대 [저장] 차 1.4 m → 0.048 m · 나머지 측점 ≤ 0.013 m = 초안 첫 계획선 ↔ 서버 옛 차이) · 노선 밖 시설(덧 · 측점 계획 · 알약에서 뺌 · 알림) · 되돌리기 원상 · 시험 test_459 10 + 연관 453 통과 · typecheck 0 · DB 7표 · storage 해시 되돌림 같음 · 한계 = 노선 초안 전에 옮기고 저장 안 한 시설은 「따라간 자리」로 봄 · 묶음 다시 지음 필요(route_follow · structure_station · Pipeline_Grade). + +## 460. 요구 270 마무리 (브레인) — (일부 · 남은 줄은 PLAN.md) + +- [x] 460-2 합치기 · 묶음 다섯 · typecheck · 장 시험. +- 검증완료(460) — 457 · 458(+ 덧 둘) · 459 · 461 · 462 메인 합침 · 서버 묶음 다섯 · typecheck 0 · 장 시험 82 파일 629 통과 · 브레인 화면(검증_랩탑메인 · 저장 없음): 교점 ↓ 한 번 노선 1080.2 → 1100.2 m · 관 351 → 372 m(18+12) · 종단 알약 · 평면 마커 · B06 「18+12」 카드만 관 그림 · 옛 · 이웃 카드 없음 · ↶ 복귀 · 일반측점 위(360 m = 18+0 카드 하나) · 떠남(361) 통과 · 초안 버림 · 프로젝트 되돌림 · 검증 대기. + +## 461. 종단 직선화 붉은 강조 · 끝 R 기본 L · 직선화 · 자유지정 영역 실시간 띠 (요구 271-1~3 · sub1 · Opus high) + + +- 근거 = `docs/raw/조사/2026-10-18_461_요구271_직선화영역.md`. +- 정함(브레인): 분석 문서 3장 그대로(직선화 클릭 = 늘 측점 고름 · 측점에 붙음 · 끝 자동 R 지움 → 기본 L 20 · 이미 직선 범위 = 부분 구간 고름 + ▲▼ 로 양 끝 L 20 · 법정 판정 오차 1e-3 짝 · 실시간 띠 도우미 하나 · Esc = 시작만 취소). +- [x] 461-1 — 확인: 새 `test_271_straighten_pick.py`(측점 고름 · 붙음 · Esc · 끝 L 20 · 자동 R 지움 · 사용자 R 둠 · BP · EP · 부분 구간 ▲ · 파이썬 build_alignment 거울) · 새 range band 시험 · 215_1 · 426 · 355_1 · 219_1 · 432_1 + 화면(분석 문서 5장 1~17). +- 검증완료(461) — 시험 6 파일 61 통과 · typecheck 0 · 화면(검증_sub1 · 5174 · 밝음 · 어두움) 1~5 · 7~15 · 17 수치 맞음 · 6(저장 자동 R)은 저장분 없는 프로젝트라 단위 · 거울 시험만 · 16(팝아웃)은 탭 둘 한도로 안 띄움 · 덤 = 쉬프트 붉은 강조가 다른 도구로 넘어가도 남던 것 뗌 · 쉬프트 고름 직후 강조가 다음 다시 그림 때 뜨는 것은 옛 그대로 · 캐시 되돌림 · 검증 대기. + +## 462. B05 · B06 한 페이지 ① 시설 줄 페이지 한 벌 · 메모리 전달 정리 (요구 271-5 · sub2 · Opus high) + + +- 근거 = `docs/raw/조사/2026-10-18_462_요구271_한페이지.md` 3장 원인 1 · 5 · 4장 (A) · (E). +- [x] 462-1 — 확인: 새 `test_271_facility_lane.py`(B06 먼저 → B05 읽음 = B05 먼저 듣는 중 · 알약 · 측점 · 평면 마커 · 관 id 장부 같음 · 헛 id 0 · 451 잔여 재현 뒤집기) · 399 · 409 · 410 · 411_b · 440 · 451 + 화면(분석 6장 P1 · P2 · P3 · 시설 · 관 · 평면 패널 조작). + - 검증완료 — 관련 시험 507 통과(실패 2 = 받기 전부터 · test_b06_save_recompute · test_307) · ORCA P1 · P2 · P3(옹벽 넣음 · 지움 · 관 351→360 · 장부 헛 id 0 · 계획고 편집 한 번만 옮김 · 관 옵션 새로고침 뒤 B06 Φ800). + +## 463. B05 · B06 한 페이지 ② 페이지 설정 한 칸 · 상세 알림 · [저장] 같은 본문 (요구 271-5 · sub6 · Opus high · 458 · 459 합친 뒤) + + +- 근거 = 같은 문서 원인 2 · 3 · 4 · 4장 (B) · (C) · (D). +- [x] 463-1 — 확인: 새 `test_271_detail_notify.py`(강제 받기 · [측점 만들기] 뒤 듣는 쪽 한 번) · `test_271_save_same.py`(B05 있을 때 · 없을 때 [저장] 요청 줄 같음) · `test_271_profile_settings.py` · 442_2 · 449 · 446 + 화면(B06 새로고침 → 라벨 오프셋 · 기울기 빨강 · 넓힘 · [측점 만들기] · [저장] · [확정] · [초기화] · 반대 방향). + - 검증완료 — R1 · R2 옛 코드 실패(듣는 쪽 0 번 · 옛 캐시) 뒤 고침 · 관련 시험 369 통과 · typecheck 0 · ORCA(검증_sub6 · 5181) B06 새로고침 = B05 와 같음(라벨 5+0 · 빨강 28 · 상한 20 % · 강제 켜짐) · 반대 방향 같음 · 넓힘 55 m = 듣는 쪽 1 번 새 상세 · [저장] 두 길 · [확정] 확정 요청 줄 같음 · [초기화] 뒤 저장 설정(0+0 · 14 %) · [측점 만들기]는 빠진 측점이 안 생겨(관 저장 때 서버가 세움) 시험만 · DB 7표 · storage 해시 되돌림 같음 · 옛 시험 5개 단언 · 가짜 창구를 flushRouteParts 로 맞춤. + +## 464. 요구 270 · 271 마무리 (브레인) — (일부 · 남은 줄은 PLAN.md) + +- [x] 464-1 합치기 · 묶음 다섯 · typecheck · 장 시험. +- 검증완료(464) — 457~459 · 461 · 462 · 463(+ 덧 surface_params) 메인 합침 · 서버 묶음 다섯 · typecheck 0 · 장 시험 87 파일 646 통과 · 14 건너뜀 · 창마다 화면 확인 · 브레인 화면 확인(460) · 메인 서버 다시 켬 · 검증 대기. + +## 465. 요구 272 — 지정 · 산출 값이 저절로 바뀜 분석 (브레인 · 에이전트) + + +- 근거 = `docs/raw/조사/2026-10-19_465_요구272_값안변함.md`(재현 · 원인 · 정함 · 절마다 영향 범위 · 시험 · 화면 목록). +- 정함(브레인): 분석 4장 그대로 — 파생값 = 입력(저장 정본 + 세션 초안)만의 함수 · 들어온 길 · 보기 차례 · 접힘 · 메모리 · 새로고침으로 갈리지 않음 · 측점 스냅 = 의도(판정 밖) · 단면 모양 기본값 짝(7번)은 기록만. +- 참값 = 서버 정본 누가토량 −17,570.7 ㎥(검증_랩탑메인). +- [x] 465-1 분석 · 계획. + +## 466. 값 안 변함 ① 상세 가게 메모리 = 페이지 수명 · 버린 초안 차례 가게 측점 (요구 272 · 분석 4장 (A) · (A2) · sub7 · Opus high) + + +- 먼저 `design_pipeline_page.ts`(700줄) 가게 구독 `:383-403` 을 새 `design_pipeline_page_publish.ts` 로 뗌. +- [x] 466-1 — 확인: 새 `test_272_detail_memory.py` · `test_272_drop_store_stations.py` · 분석 5장 (A) · (A2) 기존 시험 + 화면(분석 7장 466-A · 예외). + - 덧 고침 — 새로고침 · 다시 열기에 관 초안 측점이 빠지던 흠(열 때 초안 있으면 측점 냄) · 다시 열 때 시설 줄이 측점을 늦게 내 그 사이 차례가 옛 화면 선으로 셈한 측점(화면 선만 바뀜 = 낡으면 cross 한 번 더). + - 남은 흠(467 몫) — 관 초안을 일반 측점 자리(340)에서 지움 = 측점 자리가 같아 갈아끼움 안 함 → 메모리 −17,601.4 · 새로고침 −17,541.5. + - 검증완료 — 시험 318 통과(새 9 · 옛 판에서 새 9 실패 · 옛 검증_sub7 경로 시험 62 건너뜀) · 화면 R1 [폐기] → B05 −17,570.7 · 351 · B07 351 · 노선 초안 ↶ 가게 · 세션 측점 57 · 새로고침 관 361 초안 57 측점 −17,534.4 = 메모리 길 · 접힘 · 팝아웃 · 밝음 같음. +- [x] 466-2 덧(470 4.2 N1 · N2) — [확정] 성공 길도 상세 비움(`invalidateSectionDetail`) · B06 폼 관 옮김 + 옵션 = 옮긴 자리로 찾음(옵션 · 캐시 얹기 · 집계 항목). + - N2 화면 = 옵션 칸이 제 변경 때 먼저 반영돼 보통 조작으론 그 길을 안 탐(코드 길만 · 시험이 덮음) · 옮긴 새 자리 카드 옵션 유지 확인. + - 검증완료 — 시험 336 통과(새 `test_466_pipe_move_options` 2 · 확정 항목 1 · 옛 판에서 실패) · 화면 [확정] → B07 상세 = 새 객체 · 세션 = 서버 정본(옛 사본 아님) · DB 7표 61행 · storage 파일 되돌림(백업과 같음). + +## 467. 값 안 변함 ② 갈아끼움 정본 표본 유지 · 소단 원천 한 벌 (요구 272 · 분석 4장 (B1) · (B2) · sub5 · Opus high) + + +- [x] 467-1 — 확인: 새 `test_272_swap_keeps_canon.py` · `test_272_berm_source.py`(TS ↔ 파이썬 거울) · 분석 5장 (B1) · (B2) 기존 시험 + 화면(분석 7장 466-B · 소단 있는 자기 검증 프로젝트). +- [x] 467-2 덧 — (B1) 같은 열쇠 → 같은 자리(격자에 구조물 놓고 뺌도 정본 표본) · 고름 ↶ = 정본(다시 셈 물러섬 = 저장 정본 `savedDesigns` · `handleDesignChange` 메모리 덮기 뺌 · 새 `test_272_choice_undo.py`). +- [x] 467-3 덧 — ① 짝 없는 새 측점(구조물 · 추가 측점 · 새 관) = 계획선 꼭짓점 안 세움(파이썬 `_follow_moved_stations` · TS `followMovedNodes` · 짝 있는 옮긴 관 = 427 그대로) ② 제자리로 온 측점 = 저장 정본 표본(CanonRow 자리 · 표본) ③ 일반 측점 자리 관 지움 = 갈아끼움(`sameStationList`) ④ 시설 줄 종류 표 전 측점 안 칠함. +- 검증완료(467-3) — 시험 19 파일 150 통과 · 새 단언 옛 코드 실패 · typecheck 0 · 화면(5180 · 검증_sub5 · 백엔드 다시 켬): 소단 22+0 [저장] 전 −17,595.6204 → 뒤 −17,595.6044(435 · 445 계획고 같음 · 새 측점 지반 표본 mm 차만) / 관 18+11 → ↶ = GET 와 측점 모두 같음 / 관 17+0(일반 측점 340) → 지움 = −17,541.5871 = 새로고침 값 · 340 일반 측점 / DB 7 표 · storage 해시 되돌림 같음 · 검증 대기. +- 검증완료(467) — 시험 37 파일 268 통과 · 새 시험 셋 옛 코드 실패 확인 · typecheck 0 · 화면(5180 · 검증_sub5): 관 17+11 → 18+11 → ↶ = −17,570.7 · GET 대비 관 측점만 다름 / 새 탭 B05 만 소단 놓음 = B06 연 뒤 = −17,595.6301 · 소단 빼면 정본 표본 / [측구] · [토사] · [단경사] · 노견 ◀ · 소단 깊이 ▼ 각각 ↶ = 고르기 전 값 · ↷ = 고른 값 / 새 탭 · 새로고침 · 어두움 −17,570.7065 · DB 7 표 · storage 해시 되돌림 같음 · 검증 대기. + +## 468. 값 안 변함 ③ 되돌리기 빈 칸 · 접힘 파생 · 배지 자릿수 (요구 272 · 분석 4장 (C1) · (C2) · (C3) · sub1 · Opus high) + + +- [x] 468-1 — 확인: 새 `test_272_history_empty_cells.py` · `test_272_hidden_summary.py` · 분석 5장 (C1)~(C3) 기존 시험 + 화면(분석 7장 466-C · 팝아웃). + - 검증완료 — 새 시험 10(옛 코드 7 실패) · 기존 173 통과(139-2 묶음 로더 흠 = 옛 코드도 같음) · typecheck · 화면 검증_sub1: 교점 ↓ → ↶ → B06 → B05 = ↶ 꺼짐 · ↷ 켜짐 · 빈 칸 0 · 접은 채 교점 ↓ = 배지 −19,899.5(펼침 같음 · 측점 56) · 떼어 낸 유토 판 곡선 갱신 · 밝음 · 어두움 · 「[]」(관 모두 지움)은 걸음 그대로 둠. +- 덧(sub1 찾음 · 옛 코드도 같음) — ① 교점 ↓ → ↶ → 같은 탭 새로고침 = 누가토량 −17,385.4(새 탭 −17,570.7) → 466 덧(sub7) ② B06 카드 [측구] → ↶ = 카드 · 누가토량 −17,572.4 안 돌아옴(Design_Sync 가 메모리 상세 design 을 덮음) → 467 덧(sub5). + +## 469. 요구 272 마무리 (브레인) — (일부 · 남은 줄은 PLAN.md) + +- [x] 469-1 합치기 · 묶음 다섯 · typecheck · 장 시험 · 브레인 화면(검증_랩탑메인 · 저장 없음 · 새 탭 B05 · B06 · 새로고침 · 팝아웃 · 접힘 누가토량 같음). +- 검증완료(469) — 466(+ 덧 둘) · 467(+ 덧 넷) · 468 메인 합침 · dev 받음 · 서버 묶음 다섯 · typecheck 0 · 장 시험 40 파일 185 통과 · 31 건너뜀 · 메인 서버 다시 켬 · 브레인 화면(검증_랩탑메인 · 저장 없음) 새 탭 · B06 왕복 · 새로고침 · 접힘 = −17,570.7 · 57 측점 · 교점 ↓ → ↶ = 정본 · ↶ 꺼짐 ↷ 켜짐(B06 다녀와도) · 접은 채 ↓ = 2 초 안 새 값 · 관 옮김 [폐기] = 351 그대로 · [측구] ↶ = 정본 · ↶ 뒤 새로고침 = −17,570.7 · 검증 대기. + +## 471. B05 · B06 데이터 흐름 참고 문서 (사용자 지시 · 브레인 · 에이전트 · 467 · 466 덧 합친 뒤) + + +- 자리 = `docs/guide/B05_B06/`(위키 규칙 · 파일마다 100줄 · 표 형식) — 한 장 그림 · 조작별 표(어디 놓임 · 브라우저 셈 · 서버 셈 · [저장]) · 값별 표(주인 · 사본 · 셈 자리 · 짝) · 지킬 규칙. +- 근거 = `docs/raw/조사/2026-10-19_470_B05B06_데이터흐름.md` + 466~468 합친 코드. +- 코더 업무 지시 공통 블록에 「B05 · B06 고치기 전 읽음 · 흐름을 바꾸면 같은 커밋에 문서도 고침」 한 줄. +- [x] 471-1 문서 · index 갱신 · 공통 블록 줄. +- 검증완료(471) — `docs/guide/B05_B06/` 8 파일(각 100줄 안) · 경로 170 git 목록과 맞음 · 466~468 바뀐 줄 다시 읽음 · BRAIN 3장 지시 글 한 줄 · 검증 대기. + +## 472. B05 · B06 코드 구조 다시 세움 (요구 273 · 단계 진행 · 단계마다 기준값 그대로) — (일부 · 남은 줄은 PLAN.md) + +- [x] 472-0 목록(에이전트). +- [x] 472-1 기준값 시험(sub2 · 목록 4.2) — 고정 자료 `resources/tester/fixtures/golden_472/`(검증_랩탑메인 읽기만) · 브라우저 길(vite ssr 진짜 단계 함수) · 서버 길(pytest · DB 없이 [저장] 엔진 차례 + server-calc) · 길마다 0 차 · 두 길 사이 「알려진 차」 목록만 허용 · 값 파일은 466 · 467 덧 합친 뒤 다시 뜸. + - 길 넷 = 정본(GET) · [저장] 재계산 · 노선 저장 체인 · 브라우저 묶음 · 알려진 차 = R7 · W0(정본 경고 옛 코드) · X2(입력 선 0.1 mm ↔ 1 mm · 끝값 0.69 ㎥) · W1(경고 글 두 벌) · X1 · X3 은 이 고정 자료가 안 거침. + - 검증완료 — `test_472_1_golden.py` 9 통과 · 1 건너뜀(API 왕복) · 정본 = [저장] 재계산 = 노선 저장 체인 −17,570.70 · 브라우저 −17,570.01 · 측점 57 · 화면(B05) 배지 −17,570.7 ㎥ · 57 측점 · 고정 자료 2.98 MB. +- [x] 472-2 걷어내기(목록 4.3 · 2-A B05 sub3 · 2-B B06 sub4(+ 상세 파일 이름 차례 흠 · cross_01080.16m 이 1080 앞) · 2-C 공용 sub6 · 「확실」 줄만 · 추정 줄은 사용자 답 뒤). → 2-B(a6a1b9213) · 2-C(9afa4e303 · c856a0849) 메인에 있음 · 추정 줄 = 472-7. + - [x] 2-A B05 — Ford 파일 통째 · `/route/replan/reset`(파이썬 · TS) · TS solveRoute(+ 딸린 RouteSolve 타입 둘) · export 열(몸통째 · 파일 안 부름도 0) · 딸려 죽은 INLET_KINDS · 위키 한 줄 · corridor 다시 지음. + - 검증완료 — 고친 대상 시험 720 통과 · 83 건너뜀 · golden 9 통과 · typecheck 0 · 화면(B05 · B06 · 새로고침 · 접힘 · 어두움 · 3D) 누가토량 −204.2 ㎥ · 측점 59 · 알약 1 같음 · 처음 새로고침 한 번 −211.6 ㎥(6 번 중 1 · 지운 코드 부름 0 → 기존 경합 추정). + - [x] 473 새로고침 누가토량 흔들림(요구 272) — 원인 = 시설 줄이 관 알림 전 「모름」을 빈 목록으로 심음(`design_facility_lane.ts` refresh · paint) → 종단도 선이 저장 관 측점 389 꼭짓점을 뺌 → 첫 cross 가 380 · 389 · 400 을 그 선으로 다시 셈(389 계획고 852.79 대 852.837) → 배지 −211.6 ㎥ 1 초 남짓 → 관 도착 뒤 cross 한 번 더 −204.2. 고침 = 시설 줄 known(종류 표 · 구조물 · 관 알림 다 옴) 뒤만 심음 · 종단도 planted 전 = 저장 기준 · 서버 측점 그대로(`design_profile` · `design_profile_base` listedBase null · Render deriveProfile · `design_view_profile_sections` stationsReady) · 위키 rules 한 줄. + - 검증완료 — 옛 코드 흔들림 새로고침 2/20 · 새 탭 1/20 · B06 바로 0/20(바쁠 때 6/11) → 고친 뒤 60/60 숨김 → −204.2 만 · test_473_lane_ready 4 통과(옛 코드 빨강 = 관 전 [] 심음 · null 못 받음) · 관련 66 파일 391 통과(test_346_2 가짜 다리에 stationsReady 더함) · golden 통과 · typecheck 0 · 화면(검증_sub3 · B05 · 새로고침 셋 · B06 · 접힘 · 어두움 · ▲ 0.1 m → −252.2 → ↶ → −204.2 · 초안 없음) 측점 59 · 19+9 · 알약 1 같음. + - [x] 시험 정리 둘(소스 그대로) — test_b05_structures_registry_policy 빨강 4 = 사용자 구조물정의 판 23(켬 · 끔 명시 · 맹암거 3 m · 3 %)과 옛 단언(수 28 · 끈 목록 · 바닥막이 켬) → 시험이 마스터 파일을 읽어 판정(수 · 이름 안 박음) · 맹암거 기본값 = 사용자 지시(요구 223 · 4baf49ba4) 근거로 인정 / test_prefs_persist_across_tabs 빨강 = 388-3 세션 넘침 때 결과 칸을 비우는 `setOrMakeRoom` 글을 「저장소 가름」으로 오판 → 판정을 저장소 고르는 `storageFor` 안으로 좁힘. + - 검증완료 — 두 파일 24 통과(registry 20 · prefs 4) · ruff 깨끗(옛 줄 길이 하나 그대로). + - [x] 2-B B06 — `POST …/cross-design`(파이썬 · TS · 응답 스키마 · TS 요청 타입 · 파이썬 요청 스키마는 test_316 이 써서 둠) · export 열 셋 지움 · PIPE_DISPLAY_NAME → `common_util_structure_catalog` · Api_Fetch 세션 · 사진첩 창구 → 새 `B06_Section_Api_Context.ts` · 덧 흠 = 횡단 파일 측점 차례(`cross_files_in_order` 한 벌 · B06 상세 GET · B07 측점 파일 · B07 장 나눔 이름 sorted 걷음) · 472-3 알려진 끌림 셋 걷음 · sc · co · ex 다시 지음. + - 검증완료 — 고친 대상 시험 1111 통과(빨강 1 = 지운 엔드포인트 이름 단언 → 고침 · 오류 2 = test_139_2 옛 코드에서도 같음) · golden 9 · 472-3 등록부 · 새 시험 test_472_2_cross_order(옛 코드 빨강 3) · typecheck 0 · 화면(검증_sub4 · B06 · B05 · 새로고침 · 새 탭 · 판 접힘 · 어두움) 누가토량 −17,561.8 ㎥ · 측점 58 같음 · 상세 GET 1080.0 → 1080.16 오름차순 · 카드 차례 같음. + - [x] 2-B 덧 세션 끌림 — 신원표 `common_util_pick_tag`(관 id = 화면이 usePipeIds 때 세션 장부 꽂음) · Wire 토스트 = 알림 창구(Cross_View 가 꽂음) · design-calc · sc · co 세션 · 화면 끌림 0 · 472-3 알려진 끌림 다섯 더 걷음(남은 Api_Fetch · config · ui_template = 헬퍼 정규식 헛잡음 · sub2) · ex 는 B07 덧그림이 B06 상세 창 화면을 끌어 그대로. + - 검증완료 — 고친 대상 시험 906 통과(오류 = test_139_2 옛 그대로 · 286_1 헬퍼 흉내 → 진짜로 고침 10 통과) · golden · 472-3 통과 · typecheck 0 · 화면 B06 누가토량 −17,561.8 · 58 측점 · 카드 신원표 pipe-s1 · s2(세션 장부) 같음. + - [x] 2-C 공용 — `common_util_mass_haul_view` 866 줄 나눔(그래프 601 · `_callout` 말풍선 · 값 표기 · `_legend` 이름 · 범례 · 동작 같음) · DESIGN_VIEW_ROUTES · ALIGNMENT_DRAFT_KEY_PREFIX · structureStatus · bermSpec · MASS_HAUL_HEIGHT · createMassHaulSummary(몸통째) · 세션 열쇠 culvertmove · std-cross 낡은 주석 · 공용 머리 시험 경로 `tmp/tests` → `resources/tester`(B06 파일 머리 여섯은 2-B 몫이라 남김) · 위키 세션 열쇠 한 줄 · sc · co · ex 다시 지음. + - 검증완료 — 고친 대상 시험 413 통과 · 1 건너뜀 · 빨강 1 = `test_prefs_persist_across_tabs` 설계값 세션(388 커밋 뒤 늘 · 고침과 무관) · golden 통과 · typecheck 0 · 화면(검증_sub6 · B05 · B06 · 새로고침 · 유토 팝아웃 · 판 접힘/펼침 · 범례 켬/끔 · 말풍선 · 어두움) 누가토량 −17,570.7 ㎥ · 측점 57 같음 · 같은 탭 새로고침 6 번에 1 번 −17,385.4(옛 코드로 되돌려도 8 번에 1 번 · 472 덧 경합과 같은 갈래). +- [x] 472 덧 — [저장] 측점 맞춤(_stand_patch_stations)이 구조물 측점 사용자 칸(uphill_side_source=user · pavement_*)을 지움 · X6 넘기는 칸 목록 두 벌(sub8). + - 원인 = [저장] 상단측 차례(`POST /route/confirm` → `_append_irregular_cross_sections` · 매 [저장])와 측점 맞춤이 `_merge_irregular_into_longitudinal` 로 구조물 측점 줄 통째 갈음 · 측점 줄 쓰는 곳은 이것 · 상단측 병합 둘뿐 · 고침 = 같은 자리 옛 줄에서 `STATION_CARRY_KEYS`(상단측 출처 · `user` 면 값도 · 포장 표기) · 새 자리 포장 표기 = 지금 계획선 · X6 = 거울 시험(두 목록 같음 · 한 벌은 472-4). + - 검증완료 — test_472_station_user_fields 4(옛 코드 빨강 3) · golden 통과 · 고친 대상 시험 212 통과 · 화면(검증_sub8) 351 상단측 left 세션 지정 → [저장] = left · user · 포장 19.76 % 그대로 · 실제 단추 길(새 탭 B06 [저장] → 새 탭 [저장] · 두 번 다 서버 재계산 나감) = 351 right · user · 포장 19.76 % 그대로(옛 코드 = 출처 · 포장 지움) · 칩 포장 권장 29 · 성토 5m↑ 40 같음 · DB · storage 되돌림(차 0 · 누가토량 −17,570.7) · B06 카드엔 상단측 · 포장 단추 없음(손 지정 = [확정]이 카드 측구 방향을 되씀 E-7 · 3D 램프 누름 코드 없음). + - 남은 것 — 노선 저장(측점 통째 새로)은 상단측 손 지정을 안 넘김(「측구 방향은 새 지형이 정함」 기존 규칙 · 사용자 협의) · 옮긴 구조물 새 자리 = 지형 자동 · 세션을 직접 넣은 시험이라 횡단 설계 행은 right_cut 그대로(실제 3D 램프 누름 길은 못 돌림). +- [x] 472 덧 — B05 첫 새로고침 6 번에 1 번 누가토량 −211.6(옳은 값 −204.2 · 검증_sub3 · 경합 · sub3). +- 검증완료(473) — 시설 줄이 종류 표 · 구조물 · 관 알림 다 온 뒤만 심음 · 옛 코드 새로고침 2/20 · 새 탭 1/20 · B06 6/11 → 고친 뒤 60/60 −204.2 · test_473_lane_ready · golden 통과 · 검증 대기. +- [x] 472 덧 — [저장] · [확정] 재계산이 종단 경고를 다시 안 씀(정본 5 줄 · 지금 셈 51 줄 · sub2 기준값 시험이 찾음 · sub8). + - 서버 재계산 맨 앞 `refresh_alignment` = 경고만 지금 코드 값(기하 저장값 그대로 — 통째 다시 쓰면 6 자리 반올림 끝자리로 면적 1e-4 ㎡ 흔들림) · 파이썬 경고 글 = TS 꼴(접두 · 총괄 줄 뺌 · 브레인 A) · 기준값 경고 칸만 다시 뜸(server_save 5→50 · server_route 51→50 · W1 지움). + - 검증완료 — test_472_save_warnings 6(옛 코드 빨강 5) · golden 15 통과 · 고친 대상 시험 445 통과 · 화면(검증_sub8 · B05 [저장]) 정본 경고 5→50 · 칩 위반 34 · 미달 46 · 누가토량 −17,570.7 ㎥ · 측점 57 같음 · B06 같음 · DB · storage 되돌림(차 0). + - 덧 흠(내 고침 밖) — [저장] 측점 맞춤이 구조물 측점 351 의 `uphill_side_source: user` · `pavement_*` 칸을 지움(값 `uphill_side` 는 같음) · 재계산 「종단 경고 다시 셈」 0.8 s 더 듦(측정만). +- [x] 472-3 계산 등록부(목록 4.4 · 3-A 등록부 · Node 입구 · 시험 sub2 → 3-B 파이썬 실행기 sub2). + - [x] 3-A — `design_calc_registry.ts`(43 id · 순수 자료) · `design_calc_node.ts`(node 다섯 = 구조물 면적 · 관 길이 · 누가토량 · 유토 배분 · 터파기 · 3D) · `build:design-calc` · 나머지 실행기 = 파이썬 이름(472-4 동안) · Node 입구 도달 = logic · common_util + 「알려진 끌림」 49(세션 23 · 2-B 정리 / 기하 26 · 472-4 logic 으로). + - 검증완료 — `test_472_3_calc_registry.py` 9 통과(STAGE_DEPS 같음 · 서버 쪽 코드 브라우저 밖 · server-calc · corridor 값 같음 · 끝값 −17,570.7) · `test_472_1_golden.py` 9 통과 1 건너뜀 · typecheck 0. + - [x] 3-B 파이썬 실행기(`common_util_calc_runner.py` · `run_bundle_json` 한 길) — `run_calc(ids, inputs)` · Node 실행기 아닌 id 는 ValueError · 서버 기존 부름 자리 그대로(472-4 몫). + - 검증완료 — `test_472_3_calc_runner.py` 3 통과(NODE_IDS = 등록부 = 입구 · 값 = server-calc · 끝값 −17,570.7) · 472-3 등록부 9 · 472-1 기준값 9 통과 1 건너뜀. +- [x] 472-4 짝 모으기(목록 4.5 · ① 측점 열쇠 · 따라감 sub8 + ② 횡단 설계선 · 면적 · 소단 sub2 동시 → ③ 측점 · 지반 · 종단 · 관 세트는 남김). → ① ② 끝 · ③ = 472 덧. + - [x] ② sub2 — `Router_Design` 699 → 609줄(`_Router_Design_Ranges` 나눔) · [저장] · [확정] 다시 셈(enforce 셋 · 넓힘 뒤 설계) = Node `cross.design` 측점 묶음(`B06_Section_Engine_Design_Node.py` · 파이썬은 입력 조립) · C1 · C2 · C5 한 셈 · X3 풀림 · C4 소단 구간 = `common_util_berm_spans.ts`(서버 `cross.berm_spans`) · C3 구간 판정 · C6 얹기는 파이썬 짝 남음(C6 거울 새로 · 알려진 차 = 옛 underdrain 걷음 TS 만) · 파이썬 `compute_cross_design` 남음(B07 · 추천 · Route_Save · B05 확정 · 넓힘 찾기 · Node 못 부를 때). + - 검증완료 — 기준값 시험 10 통과 1 건너뜀(0 차 · 설계선 점 13 곳 1e-4 판정 더함) · 472-3 · C6 거울 · 영향 시험 95 파일 723 통과(빨강 4 = `test_b05_structures_registry_policy` · 구조물 표 자료 · 이번 고침과 무관) · 검증_sub2 실제 다시 셈 = 횡단 행 설계선 점 13 곳 1e-4 m 만 · 면적 · 누가토량 같음 · 행 · 파일 되돌림 해시 같음. + - [x] ① sub8 — 서버도 같은 TS(Node 입구 따라감 몫 `design_calc_node_follow.ts`) · P6 꼭짓점 세움 `profile.seat`(`Router_Confirm._seat_born_nodes` = 겉) · F2 추가 측점 `facility.plus_follow`(TS `followPlusRows` · `Plus_Stations` = 겉) · F1 구조물 따라감 `facility.follow`(`route_follow.follow_structures` = 겉) · X6 넘기는 칸 정본 = TS `ROW_CARRY_KEYS` 하나(파이썬이 그 글을 읽음 · JSON 은 헬퍼 로더가 못 풀어 안 씀) · 요구 274 규칙 시험(노선 바뀌면 손 상단측 안 들고 감). + - 남김 — F1 저장 때 좌표 맞춤 `fill_structure_coordinates`(옛 좌표 지킴 · 0.1 mm 반올림 — TS `placeOnLine` 과 규칙 달라 옮기면 저장 좌표 바뀜) · R7 서버 열쇠(주인 = 파이썬 `plan_stations` F3 · 부르는 곳 = 노선 저장 이월 ③ — ③ · F3 와 같이) · 「R7 알려진 차」(기준값 KNOWN)는 노선 저장 표본 다시 뜸 몫이라 ① 과 무관. + - 검증완료 — test_472_4_follow_node 4(옛 코드 빨강) · test_472_station_user_fields 6 · 따라감 · 꼭짓점 거울(344_2 · 380_3 · 410 · 427_1 · 459 · 368_2) · 472-3 · golden 통과 · Router_Design · Station_Swap 관련 298 통과 · typecheck 0 · 화면(검증_sub8 · 옹벽 590–610 · 추가 측점 500 놓고 B05 교점 끌기 → [저장]) 관 351 → 354 · 꼭짓점 354 세움 · 옹벽 · 추가 측점 같은 자리 · 누가토량 −18,080.2 · 측점 59 → 새로고침 · B06 같음 · DB(노선 행 통째) · storage 되돌림 차 0 · 묶음 다시 지음 필요(design-calc · route_follow 끄는 묶음). +- [x] 472-5 값 주인 하나(목록 4.6 · 5-A 관 · 구조물 sub2 · 5-B 횡단 상세 · 측점 sub4 · 5-C 종단 편집 · 페이지 설정 sub4 · 5-D B06 조정 맵 sub6 · 2-C 뒤). → 5-A~5-D · 남음 끝. + - [x] 5-A 관 · 구조물 sub2 — 판 셋 나눔(B06 구조물 판 700 → 624 · B05 구조물 판 693 → 665 · 배수 판 691 → 657 · 동작 같음) · 주인 = 가게 `pipes` · `structures` 칸 · 화면 사본은 가게 알림으로 맞춤(종단 보기 = 배수 편집기 `adoptPipes` 숨어도 · 목록 `takeStructures` 보일 때 · 횡단 판 = 마지막으로 읽거나 쓴 값과 다르면 다시 실음 · 옵션만도) · ↶ ↷ 뒤 `announceDesignStore`(관 · 구조물 · 추가 측점) · 종단 고름 · 알약 관 = 시설 줄(노선 따라감 뒤 옛 자리 안 봄) · 모듈 사본 변수는 화면 사본으로 남김(글 단언 시험 많음 · 주인은 아님). + - 검증완료 — `test_472_5_shop_owner` 3 통과(옛 코드 실패 확인) · 영향 시험 76 파일 554 통과 · 기준값 그대로 · typecheck 0 · 화면(검증_sub2 · B05 구조물 넣음 → ↶ 목록 0 → ↷ 1 → ↶ 뒤 새로 넣어도 옛 값 안 살아남 · B06 ↶ ↷ 목록 따라감 · 새로고침 그대로) · 초안 지운 뒤 행 · 파일 해시 같음. + - [x] 5-A 덧 — 겹침 정리(관 · 구조물 = 가게 알림 한 번 · 추가 측점 = 자기 훅 · 계산 묶음 = 출처마다 한 번 · 옛: 추가 측점 되돌리기에 묶음 두 번) · 열린 관 폼이 밖 값(↶ ↷ · 횡단 보기)으로 다시 엶(화면에서 찾은 흠 — ↶ 뒤 폼 옛 관경이 다른 칸 고칠 때 되쓰임). + - 검증완료 — `test_472_5_shop_owner` 4 통과(알림 수 · 옛 코드 실패) · `test_429_save_path` 5 · 영향 시험 425 · 화면(B06 동물이동형 무 → 종단 폼 무 · 종단 관경 800 고쳐도 무 유지 · ↶ 폼 1000 → 다른 칸 고쳐도 1000 · 횡단 관경 1500 → 종단 폼 · 관 표기 Φ1500 · ↶ ↷ 따라감 · 새로고침 초안 그대로) · 초안 지운 뒤 해시 같음. + - [x] 5-C 종단 편집 · 페이지 설정 — design_profile.ts 판 뼈대 나눔(691 → 659) · EditState 걷음(지금 값 = 가게 alignmentDraft ?? 새 칸 alignmentSaved · ↶ ↷ = 다시 읽기만) · 페이지 설정 = 가게 pageSettings 칸 · ↶ ↷ 훅이 가게로 알림 → 폼 · 기울기 한도 · 시작 측점 다시 얹음(N6) · 최소고 강제 사본 칸 profile-enforce-min-cover 지움 · 편집 가드가 페이지 설정 바로 읽음(N7) · [저장] 뒤 ↶ 가 저장 전 서버 값으로 돌던 흠도 같이. + - 검증완료 — test_472_5_value_owner 4(옛 코드 빨강 3) · 고친 대상 시험 1346 통과(빨강 = test_prefs_persist 옛 그대로 · 472-3 server_calc = HEAD 시험 NODE_IDS 에 cross.design 빠짐 · dev 에 고침 있음) · golden 통과 · typecheck 0 · 화면(검증_sub4 B05) ▲ · 종단 L · 최대 기울기 12 · 최소고 강제 각각 ↶ ↷ 정확 · B06 · B05 · 새로고침 같음(−17,589.6 · 872.03) · 끝에 처음 값(−17,561.8 · 초안 없음) · 팝아웃 창은 ORCA 에서 못 봄. + - 덧 화면 — 직선화(−18,330.8) · 쉬프트(−18,421.6) · 자유지정(−27,306.3) 각각 ↶ ↷ · B06 · B05 · 새로고침 같음 · 띠 · 고름 = 도구 화면 메모리(5-C 밖) · 끝 처음 값. + - [x] 5-B 횡단 상세 · 측점 — design_pipeline_page.ts 저장 기준 나눔(694 → 646 · `_saved.ts`) · 상세 가게 칸 셋(Section_Canon.ts: 저장 정본 상세 · 초안 전 hold 상세(판 바뀌면 새 판) · 노선 초안 상세 = pipelineDetail) · 페이지 canon.detail · held.detail · shown 사본 걷음(지문만) · savedStations 남김(sub2 관 · 구조물 줄로 셈). + - 검증완료 — test_472_5b_detail_owner 3(옛 코드 빨강 3) · 고친 대상 시험 578 통과(헬퍼 넷 가게 칸 채움) · golden · typecheck 0 · 화면(검증_sub4) 노선 끌기 −19,100.7 → B06 같음 → ↶ 처음 값(−17,561.8 · hold 비움) → ↷ → 초안 둔 채 새로고침 −19,100.8(옛 코드도 같음 · 기존 0.1 ㎥ 차) → 떠남 [폐기] 초안 칸 비움 → B07 열림(도면 16) · [확정]은 DB 되돌릴 도구 없어 안 누름(시험이 덮음). + - [x] 5-D B06 조정 맵 sub6 — Station_Controls 나눔(687 → 646 · 저장 묶음 접기 → Link_Session · 동작 같음) · 메모리 맵 걷음(반폭 · 흙막이 4축 · 유입 형식 · 집수정 · 단 수 · 단별 구간 · 연동 · 세월교 · BOX = 세션 칸이 주인 · 창구 `B06_Section_Session_Cells` = b_page_state 열쇠 · 브레인 B) · 캐시 설계 칸 얹기 = 고치기 전 칸 + 지금 칸(`noteAdjustBase` · `withDraftAdjusts`) · ↶ ↷ 가 조정 칸을 바꾼 걸음만 폼 · 상세 얹기 · 카드 · 면적 다시(`onRestore`) · moveSessionMaps · markMovedStates · setStationAdjustReload 걷음(측점 이동 = Station_Keys 세션 칸 바로). + - 검증완료 — test_472_5d_adjust_owner 5(옛 코드 빨강 4) · 옛 단언 고침(318 다시 읽기 창구 · 272 H4 맵 이동 · 346_2 맵 열쇠 · 445 헬퍼) · 영향 시험 96 파일 604 통과 · golden · 472-5 넷 · 472-3 그대로 · typecheck 0 · 화면(검증_sub6) 반폭 ↶ ↷ 카드 눈금 · 흙막이 ◀◀ ↶↶ 뒤 ▲ = x 0(옛 0.2 안 살아남) · −17,575.6 → −17,573.1 → −17,570.7 · B05 에서 ↶ → B06 같음 · [경사] ↶ ↷ 폼 · 카드 단추 · 세월교(종류 바꿈 초안) ▼▶ ↶↶ 뒤 ▼ = 좌우 0 · 새로고침 길(세션 칸 둔 새 탭) −17,573.1 · 떠남 [폐기] · 판 접힘/펼침 −17,570.7 · 카드 57 · 저장 안 함 · 묶음 다시 지음 필요(design-calc — Section_Adjusts). + - 남은 것 — 암선 · 암 경사 메모리 맵(`_UI_Page_Persist` rockb · cutslope)도 같은 N5 꼴 · B05 상단측 맵(5-D 파일 밖). +- [x] 472 덧 — 노선 초안(교점 끌기 · 관은 follow) ↶ ↷ 값 하나(sub4) — 앞서 「관 끌기」는 실은 관 옆 노선 교점 끌기 · ↶ 가 버림 차례 + 관 먹이기 차례로 갈리고 버림 사이 초안 · 저장 상세 · 종단이 섞여 그려짐 · 되돌린 뒤 시설 줄이 늦어 낡음 다시 셈이 옛 관 자리 계획선으로 셈 → 훅은 버림 동안 관 안 먹임 · 버림 동안 그리기 멈춤 · 되돌림 바로 뒤 저장 기준 · 버림 동안 낡음 다시 셈 미룸 · 저장 노선 셈 편집 = 그 노선 것 · 되돌림 · 갈아끼움 얹기 꼬리 한 벌. + - 검증완료 — test_472_5c_drop_once 4(옛 코드 빨강) · 고친 대상 시험 836 통과 · golden 그대로 · typecheck 0 · 화면(검증_sub4 · DOM 바뀜 관찰) 판 펼침 · 접힘 각 ↶ ↷ 여섯 걸음 = 값 하나씩(−17,561.8 ↔ −16,542.4) · 사이 틀린 값 0 · ↶ 0.2~0.5 s · ↷ 0.15~0.5 s(ORCA 배경 탭은 그리기 틀이 멈춰 「20~100 s 늦음」은 잰 쪽 착시였음). +- [x] 472 덧 — 관 지움(종단 우클릭 「배관 삭제」) ↶ = −17,598.1 ≠ 처음 −17,561.8(값으로 남음 · ↷ −17,582.7 맞음) · 옛 코드도 같음 · 실마리: ↶ 뒤 17+11(351) 측점에 관 세트(culvert)가 붙어 면적 4.28 · 3.442 · 처음(새로고침) 상세엔 351 관 세트 없음 · 면적 9.163 · 4.827 — 읽기 길(withDraftShapes)과 갈아끼움 길(reshape)이 351 관 세트를 다르게 붙임 · 어느 쪽이 정본인지 판단 필요 · 폼 옮김은 화면 폼이 안 열려(ORCA 누름) 못 돎. + - 판정 = 서버 흠 — 검증_sub4 관 파일이 옛 노선 누가거리(394)로 남음(지문 어긋남) · 측점 계획(`_load_pipe_points`) · 관 지점 GET · 화면은 좌표로 351 에 얹는데 서버 상세 읽기(`attach_saved_shapes`)만 파일 누가거리로 찾아 351 관 세트 빠짐(D1000 배관 = 관 세트 · golden 고정 자료도 351 관 세트) → 서버 읽기도 지금 노선에 얹은 관(`saved_pipes`) · 덧: 관 지움 ↶ 로 다시 선 351 측점 = 정본 설계(빈 기본 설계면 포장 권장 · 잠정 칸 빠짐) · 폼 옮김 ↶ ↷ = 열린 폼이 옮겨진 관을 따라감(옛 17+15 칸 남고 고름 풀리던 흠) · 폼 안 열린 까닭 = 알약이 화면 밖(x 1866 > 폭 1494) · 종단을 그 자리로 옮기면 ref 누름으로 열림. + - 검증완료 — test_472_d_pipe_route_attach · test_272_swap_keeps_canon 관 지움 되돌림(둘 다 옛 코드 빨강) · 관련 시험 95 + 308 통과 · golden 그대로 · typecheck 0 · [저장] 재계산 길(쓰기 없이) −17,598.07 · 351 면적 4.2799 / 3.4423 = 화면 · 화면(검증_sub4 새 탭 B05 · B06 · 유토 판 접힘/펼침 = −17,598.1 · 측점 58) 배관 삭제 −17,592.4 → ↶ → ↷ → ↶ · 폼 옮김(351 → 355 −17,547.9) ↶ ↷ ↶ · 배수유역도 관 끌기(351 → 348 −17,568.7) ↶ ↷ ↶ = 처음과 칸마다 같음 · 남은 차 = EP 누가거리 0.58 mm(첫 갈아끼움에서 묶음 측점 1080.159674 ↔ 서버 1080.159094 · 이번 고침과 무관 · 측점 셈 짝) · 저장 안 함 · 검증_sub4 기준값 = −17,598.1(옛 −17,561.8 = 관 세트 빠진 값). +- [x] 472 덧 — 관 파일 누가거리를 그대로 읽던 남은 서버 자리(sub1) — 세월교 노면 하강 · 물넘이포장 구간(`load_culvert_sets` → ford_surface_drops · ford_pavement_ranges · tilt_ranges · [저장] · [확정] · 측구 방향 다시 셈) · 카드 이름(relabel_pipe_stations) · B07 관 글 재료(load_note_sources) · 옛 비정규 측점 이관 심는 자리 → 관 읽기 한 벌 `route_pipe_points`(B05_Profile_Engine_Sections · 지금 노선에 얹음 · 노선 경로 안 줌 = 노선 파일 하나 `ROUTE_DATA_FILE`) · saved_pipes 걷음 · B06_Section_Engine_Culvert(700) → 읽기 · 얹기 `_Culvert_Sets.py` 로 나눔(동작 같음) · 영향 범위 확인 = 관 파일 읽는 서버 자리 grep 전부(B05 · B06 · B07 · Node 입력 조립 = 관 안 넘김 · DesignSave 관 옵션 = GET 열쇠 · RouteInitial = 좌표만 · B07 전개도 = M02 표와 같은 파일 열쇠). + - 검증완료 — test_472_d_route_pipe_readers 3(옛 코드 빨강 2) · test_472_d_pipe_route_attach 「노선 모름 = 파일 누가거리」 단언 = 옛 동작이라 고침 · 영향 시험 125 파일 817 통과(빨강 1 = test_472_6 상태 대조 · 따로 돌리면 6 통과) · golden · 472-3 통과 · typecheck 0 · 화면(검증_sub1) 세월교 30+0 · 물넘이포장 40+0 놓고 [저장] → 관 파일 지문 어긋냄(누가거리 +43) → 새로고침 · [저장] = 상세 57 측점 차 0 · 누가토량 −17,456.4 같음 · 교점 끌기 [저장] −17,349.2 → 새 탭 B06 같음 · 30+0 계획고 837.9(하강 0.14) · 순토량 51.5 · 다시 지문 어긋냄(−37) = 차 0 · DB 행 · storage 되돌림 차 0. +- [x] 472-6 [저장] 한 본문 · 한 트랜잭션 · 서버 전부 아니면 없음(목록 4.7 · sub8 · 세 즉시 쓰기는 답 전 그대로 · 정함(브레인) = 떠 두고 되돌림 · 프로젝트 잠금 · 6-A 노선 안 바뀐 저장 먼저 → 6-B 노선 바뀐 저장 다시 얹기 서버 Node) · 넓힘 · [측점 만들기] · 추천 [적용] 저장 시점(사용자 협의). → 6-A · 6-B 끝. + - [x] 6-A 노선 안 바뀐 [저장] · [확정] — 서버 `POST /design/save`(`B06_Section_Router_DesignSave.py` · 옛 창구 함수를 같은 차례로 안쪽 부름 · 측점 맞춤 · 재계산 · 하위 차례 실패도 실패) · `common_util_save_guard.py`(DB 행 · storage 떠 둠 → 실패면 바뀐 표 · 바뀐 파일만 되돌림 · 되돌림 실패 = 500 「복구 확인 필요」 · 프로젝트 잠금 · waited) · 브라우저 `design_save.ts` saveOneBody(차례 조각 = 본문 + 저장 뒤 정리 · 서버가 다 저장한 뒤에만 정리) · 보기 몫 steps · cross → parts · crossPart · 옛 flush 함수 = 노선 바뀐 저장 길 · 시험 갈래 환경 변수 `AISLO_DESIGN_SAVE_FAIL_AFTER`. + - 검증완료 — test_472_6_design_save 6(storage 되돌림 · 중간 실패 행 · 해시 그대로 · 정상 = 옛 차례와 행 · 파일 같음 · 복구 실패 알림 · 잠금 · 시험 갈래) · 옛 9 차례 단언 시험 10 개 한 본문 꼴로 · 관련 1075 통과 · golden 통과 · typecheck 0 · 화면(검증_sub8 B06) 암 절토 경사 0.5 [저장] → DB 0.5 · 새로고침 유지 · 시험 갈래(상단측 뒤 실패) [저장] → 「상단측 차례에서 실패 — 아무것도 저장하지 않았습니다」 · DB 행 · storage 해시 그대로 · 세션 고침 남음 · 평소 서버 [저장] 0.6 → [확정] → B07 · DB · storage 되돌림 차 0 · 묶음 다시 지음 필요(b07-extent · b07-note — Api_Structures). + - [x] 6-B 노선 바뀐 저장 — 서버가 노선 저장 뒤 관 · 구조물 · 계획고 · 횡단 초안 다시 얹기(Node) → 한 본문. `POST /design/save` 칸 `route` · `carry`(옛 노선 세션 칸) · 서버 = 노선 저장 → Node `facility.rebase`(F10) → 6-A 차례(새 노선 · 계획고 초안 새 노선 번호) → Node `stations.carry`(R9 · `B06_Section_Route_Carry_Patch.routeCarryPatches` · 넘김 규칙 `logic/B06_Section_Route_Carry`) → 횡단 저장 · 되돌림 범위 + 배수 폴더 · 지표면 확정 · 손 상단측 안 넘김(요구 274) · 노선 바뀐 [확정] = [저장] · 옛 차례 길 · 부름 0 flush 여섯 · saveCachedCrossPatches 걷음 · 등록부 690줄 나눔(`_facility`) · 저장 뒤 묶음이 초안 전 관 · 구조물을 되쓰던 흠 고침(`commitRouteFacilities` · 화면에서 찾음). + - 검증완료 — test_472_6_route_save 9(옛 브라우저 길 = 서버 Node patch · 버린 수 · 다시 얹기 같음 · 노선 차례 뒤 실패 · 넘김 실패 = 행 · 파일 그대로 · 정상 한 본문 = 옛 차례와 행 · 파일 같음(계산 시각 · 3D 파일 번호만 다름) · 옛 코드 실패) · 영향 시험 1082 + 317 통과 · golden · 472-3 통과 · typecheck 0 · 화면(검증_sub8 · 옹벽 600 · 추가 측점 510 · 0+0 · 1+0 암 경사 0.8 · 0.7 넣고 교점 끌기 → [저장]) DB 측점 61 · 옹벽 604–614 · 510 · 경사 0.8 · 0.7 · 관 351 벽 높이 · 새로고침 · B06 같음(−18,094.9) · 시험 갈래(노선 뒤 실패) 「노선 차례에서 실패 — 아무것도 저장하지 않았습니다」 행 · 파일 차 0 · 노선 바뀐 [확정] = 노선만 저장 → 다시 [확정] → B07 · DB · storage 되돌림 차 0 · 묶음 다시 지음 필요(design-calc · b07-extent · b07-note — design_selection). +- [x] 472-5 남음 — 암선 · 암 경사 맵(B06_Section_UI_Page_Persist) · B05 상단측 맵 N5 꼴 · 노선 저장 뒤 옛 노선 세션 칸 · 초안 = 저장 재확인(sub4). + - 암 경계 · 암 경사 저장소 = 세션 칸이 주인(읽을 때마다 측점 열쇠 칸 · 고칠 때 그 측점만 · 메모리 맵 · load · 갈아끼움 다시 읽기 걷음) · ↶ ↷ 가 rockb · cutslope 를 바꾸면 조정창 onRestore 로 카드 · 면적 다시 · B05 상단측 맵 = 읽는 곳 없던 사본 걷음(값 주인 = 세션 `uphill` · 상단측 차례 = 기본 조각) · 노선 바뀐 [저장] 성공 뒤 옛 노선 번호 노선 범위 초안(`clearRouteDrafts`) · `route-draft-hold` 비움(같은 번호면 노선 칸 안 지움 · 실패면 그대로). + - 검증완료 — test_472_5r_rock_owner 7(옛 코드 빨강 5) · 옛 단언 고침 4(176_3 · 271 · 443 · 344_3) · 영향 시험 134 파일 862 통과(빨강 1 = test_472_6_design_save · 검증_sub8 노선 번호 380 을 박아 둔 시험 · 「노선이 바뀌었습니다」 · 내 고침 무관) · golden · 475-3 · 472-5 넷 통과 · typecheck 0 · 화면(검증_sub4 B06) 1+0 ▼ · 2+0 ▲ · 3+0 경사 0.7 → −17,572.3 → ↶ 셋 = 걸음마다 값 · 끝 −17,598.1 칸 비움 → 4+0 ▼ = 칸에 4+0 만(옛 값 안 살아남) · ▲ 는 −0.5 에서 −0.4 · B05 에서 ↶ ↷ → B06 같음(−17,555.7) · 세션 칸 둔 새 탭 −17,554.3 · 교점 끌기 초안 −19,049.5 → [저장] 뒤 −19,049.5 · B06 · 새 탭 같음(화면 0.1 ㎥ 자리 차 0) · 세션 옛 노선 376 칸 6 · hold · 노선 0 칸 = 0(초안 칸 5,794 → 962 B) · DB 행 · storage 되돌림 SAME · ORCA 탭은 requestIdleCallback 이 안 돌아 화면 밖 카드(4+0 줄)가 ↶ 뒤 옛 글로 남음(캐시 설계 · 세션 = 맞음 · ORCA 몫). +- 검증완료(472-6) — 6-A · 6-B 노선 안 바뀐 · 바뀐 [저장] · [확정] 한 본문 POST /design/save · 떠 두고 되돌림 · 프로젝트 잠금 · 옛 9 차례 걷음 · 시험 test_472_6_design_save · route_save · 브레인 합칠 때 design_pipeline_page 충돌 풂(둘 다 살림) · 문 시험 41 통과 · 검증 대기. +- [x] 472 마무리 흠 둘(sub5) — ① design_profile 708 → 683 줄(계획고 [저장] 조각 → 새 `design_profile_save` · 높이 캐스케이드 설명 → `_Profile_Heights` 머리 · 동작 같음 · 팝아웃 시험 목록에 새 파일) ② test_472_6_design_save 노선 380 박음 → 검증_sub8 최신 노선 · 추가 측점 자리(가운데 두 측점 사이)를 그때 읽음 · 옛 차례 대 한 본문 비교에서 새 추가 측점 행 자동 번호만 뺌(브레인 승인 = 고정 자료 대신 살아 있는 프로젝트 · 노선 바뀌어도 됨) · 같은 꼴 = route_save 는 이미 최신 노선 읽음. + - 검증완료 — 새 test_472_6_profile_save 1(조각 없음 셋 · 본문 · 알림 → 넘김 · [확정] 저장 한 번) · test_230_2 · design_profile 읽는 시험 28 파일 161 통과 · test_472_6_design_save 6 통과 · 472 · 475 시험 117 통과(golden 그대로) · typecheck 0 · 화면(검증_sub5 · 5180 B05) 종단 판 측점 칸 171 · 구간 56 · 누가토량 −17,570.7 · 알약 1 = 접힘 → 펼침 · 팝아웃 창 · 결합 뒤 같음 · 검증 대기. +- [x] 475-3 노선 바뀜 암 경계 · 2단 경사 안 넘김(sub3 · 정함(브레인) = 자리 · 지형 바뀐 측점만 버림 · 그대로인 측점 유지 · 손 상단측도 같은 판정) — 자리 칸 `SEAT_KEYS`(two_stage_slope · rock_boundary_offset_m · cut_slope_ratio_user · section_mode · ditch_side · 세션 rockb · cutslope · crossdesign 같은 칸) · 판정 `sameSeat` ↔ `same_seat`(중심 0.01 m · 축 1e-3) · 끌기 세션 넘김 · Node stations.carry · 미리보기(`crossAtSeat`) · B06 갈아끼움(`unseated`) · 서버 노선 저장(`carry_cross_inputs`) 한 규칙 · 세션 값은 쓴 때 자리(`@seat`) · 지반 · 측구 종류 · 소단 · 사면 쉬프트는 그대로 넘김 · 묶음 다시 지음 필요(design-calc). + - 검증완료 — test_475_3_seat_carry 8 · 고친 대상 92 파일 557 통과(빨강 2 = test_472_6 검증_sub8 DB 교착 · 「경로 없음」 · 다른 창 동시 작업) · golden 통과 · typecheck 0 · 화면(검증_sub3) 5+0 · 30+0 암선 −0.7 · 암 절토 0.6 · 2단 경사 → 노선 안 바꾼 [저장] · 새로고침 유지 → 교점 끌기 = 5+0 유지 · 30+0 기본값 · ↶ 손 값 · ↷ 기본값 → [저장] DB 100 유지 · 600 기본값 · 초안 ↔ 저장 GET 59 측점 자리 칸 같음(성토 3 측점 ≤ 0.17 ㎡ 선 반올림 몫) · 누가토량 −15,338.0 → −15,340.5 · 새로고침 · B05 같음 · DB · storage 되돌림 차 0. +- [x] 475-1 · 4 분석(에이전트 · docs/raw/조사/2026-10-19_475_요구275_저장차_초기종단.md) — ① 브라우저 ↔ 서버 차 0.7~0.85 ㎥ = 노선 선 반올림(서버 geojson 3자리) 몫 · 121.6 ㎥ 는 넘김 두 길 갈림(추정) ④ 검증_랩탑메인 = 438 전(10-17) 초기값 · [초기화] · 노선 저장 안 바뀐 구간 · 추천 [적용] 같은 노선은 옛 꼭짓점 이어받음. +- [x] 475-1 노선 선 소수점 4자리 한 벌(sub2) — 서버 노선 geojson x · y 3 → 4자리(= 계획노선 csv) · 브라우저 초안 그린 선 · 곡선표 같은 자리(`draftLine` · 파이썬 round 짝) · 472-1 헬퍼 옮김 인자 · 페이지 배선 · 단면 모양 = 따라간 구조물(덤) · 옛 시험 둘(346_1) 저장 자리 단언으로 · 3자리에 기대는 곳 없음(관 지문 = 0.05 m 허용오차 · 측점 표시 0.01 m 칸 · B04 · B07 · 3D · 추천은 csv 또는 같은 파일 실수 읽기). + - 검증완료 — test_475_1_route_digits 5(교점 9 동 +5 m 브라우저 −15,499.51 = 서버 −15,499.51 · 옹벽 + 추가 측점 −16,281.74 = −16,281.74 · 옛 3자리 차 0.81 · 0.88 ㎥ · 그린 선 = csv 선) · golden 기준값 그대로 · 영향 시험 110 통과 · typecheck 0 · 화면(검증_sub2 교점 끌기) 초안 배지 −17,981.0 = [저장] 뒤 −17,981.0 · ↶ = −17,570.7 · B06 같음 · DB 행 · storage 되돌림 차 0 · 검증 대기. +- [x] 472 덧 — B05 보기 배관 삭제 ↶ · 배수유역도(sub4) — 원인 = ↶ 가 관 초안 없는 걸음(저장분)으로 가면 종단 사진첩이 「처음 본 관 목록」(`B05_Profile_UI_Profile_Panel_Tools.ts` initialPipes · 판이 저장분을 읽기 전 잡혀 빈 목록)을 판에 줌 → 관 하나 프로젝트는 지운 뒤 판 목록(빈 목록)과 같아 판이 「같은 목록」으로 멈춤(`B05_Profile_UI_Drainage_Panel.ts` setPipeChainages) · 가게 구독은 빈 초안(null)을 안 받음(`design_view_profile.ts` subscribe pipes) → 배수판 · 시설 줄 · 알약 · 목록 관 없음 · 묶음은 저장분 관(측점 57) · B06 보기 ↶ 도 같은 길(배수유역도 관 · 세부유역 빠짐) · 종단 ↶ 단추는 다시 그릴 때만 켜짐 맞춤(`B05_Profile_UI_Profile_Tools.ts` render). 고침 = 초안 없는 걸음 = null(저장분) → 판이 마지막 저장분 답 뒤 요청 몸통과 견줘 다르면 조용히 다시 읽음 · initialPipes 걷음 · 사진첩 쌓임 · 되돌림 알림(change)에 ↶ ↷ 켜짐 맞춤 · 위키 operations_common · _b05 · rules 줄. + - 검증완료 — test_472_d_b05_pipe_undo 4(옛 코드 빨강 2 — ↶ 가 빈 목록 줌 · 단추 맞춤 0) · 영향 시험 63 파일 418 통과(옛 단언 고침 = 215_1 `inner.undo` → `history.undo` 이름만 · 219_1 헬퍼 흉내에 onPageHistory) · golden · 472-5 그대로 · typecheck 0 · 화면(검증_sub4 · 저장 안 함) B05 보기 배관 삭제 −17,592.4 · 측점 57 · ↶ 단추 1 s 안 켜짐 → ↶ −17,598.1 · 측점 58 · 관 2 · 세부유역 2 · 제안 12 → ↷ −17,592.4 → ↶ 같음 · 관 0 되는 걸음(구조물 전체 삭제 = 옛 흠 조건) ↶ = 같음 · B06 보기 같은 차례 · 전체 삭제 ↶ 같음 · 새로고침 · 유토 판 접힘/펼침 · 저장 안 하고 떠났다 옴(초안 남음 → ↶ = 저장분) 같음 · 영향 범위 확인(setPipeChainages · restorePipes · pipes 구독 · feedFacilities 훅 · 시험 헬퍼 stub) · 어두움은 이 페이지에 단추 없음 · 검증 대기. +- [x] 472 덧 — B06 헛 초안 · 지반 종류 어긋남(sub6) — 표준 횡단 = 열 때 패널이 config 를 · 설정값 받기가 저장분을 세션 `std-cross` 에 베낌 → 안 씀 · 계산은 세션 → 저장분(`section-context`) → config · 같은 값이면 칸 지움 · 카드 단추 = 일곱 칸 통째 → 바꾼 칸만(앞서 바꾼 칸에 얹음 · [저장] patch · 노선 넘김도 빈 칸 안 실음) · 소단 사본 `berm` = 떠남 확인 밖(소단 있는 프로젝트 열기만 해도 물음) · 지반 = 정본 상세 ripping_rock · 카드 「토사」 단추 꺼짐(이름은 늘 「토사」 · 켜짐/꺼짐이 값 · 사용자 확정 그대로) · 열기만 남는 칸 = `berm`(구조물 파생 · 빈 `[]`) · `pipe-ids`(관 id 장부) — 둘 다 떠남 · 되돌리기 고침 밖. + - 검증완료 — test_472_open_no_draft 13(옛 코드 빨강 9) · 영향 시험 577 + 6 통과(옛 씨앗 단언 셋 고침 · golden · 472-5 그대로) · typecheck 0 · 화면(검증_sub6 새 탭 B06) 초안 칸 std-cross 0 · 떠날 때 확인창 없음 · 카드 1+0 「토사」 꺼짐 = ripping_rock · [측구] → 초안 `{ditch_choice:false}` 하나 · ↶ → 칸 0 · 표준 노폭 3.5 → 칸 생김 · 3 → 칸 지움 · 누가토량 −17,570.7 · 측점 57(B06 · B05 · 새로고침 같음) · 검증 대기. + +## 476. 노선 추천 때 초기 종단 미리 셈 · [적용] 늘 새 규칙 (요구 276 · 분석 에이전트 → 코더) + + +- 사용자 확정: 추천 후보마다 초기 종단(전 측점 R · R > 500 직선화 · 438 · L 20)을 미리 셈해 둠 · [적용] = 그것을 작업본 · 초기값에 씀 · 같은 노선도 옛 꼭짓점 이어받지 않음 · 기존 프로젝트 = 추천 [적용] 다시 누르면 새 초기 종단. +- 근거 = `docs/raw/조사/2026-10-19_475_요구275_저장차_초기종단.md` ④. +- [x] 476-0 분석(에이전트 · docs/raw/조사/2026-10-19_476_요구276_추천초기종단.md). +- 사용자 확정(요구 277) — 추천 [적용] = 평면 → 종단 → 횡단이 새로 따라옴 · 그 노선 기준 초기화 · 이전 수작업(종단 편집 · 횡단 손 입력 전부) 버림 · 초기값 = 깨끗한 셈 값. +- [x] 476-1 구현 · 시험 · 화면(sub7 서버 · sub1 화면) — 측정: 후보당 끔 +0.9~1.4 s · 켬 +3.6~5.0 s · 저장본 꺼냄 0.35 s · 정함(브레인) = 뒤에서 미리 셈 그대로(기능 먼저 · 속도 따로). + - ① [적용] = 옛 계획고 · 편집 · L 안 옮김(끔 · 균형 셈 실패 = 1차 계획선 438) · 요구 277 = 횡단 손 입력도 안 넘김(`carries_cross_inputs`) ② `build_sections` · 따라감 · `seat_base_pvi` 셈 몫 뗌(동작 같음 · 횡단 이름 규칙 → `_Engine_Sections_Names`) ③ 새 `B05_Profile_Engine_InitialProfile`(후보 노드 → 화면 펴기 짝 `draft_nodes` ↔ TS flattenServerPlan → 노선 짜기 → 관(새 세류선 교차 포함) · 구조물 · 추가 측점 따라감 → 438 → 켬 = 1 m 균형 얹기) · `_Router_RouteInitial_Initial`(지문 · 저장본 `route_recommend/initial`) · 응답 `initial_profile` ④ [적용] = [저장]과 같은 프로젝트 잠금 · 떠 두고 실패면 되돌림(응답 waited) · 부름 없던 `_write_working_route` 지움(700줄). + - 검증완료 — test_476_1_apply_initial 10 · test_476_1_recommend_initial 14(미리 셈 ↔ 체인 파일 길 꼭짓점 차 0 mm · 끔 · 노선 바뀜 + 옹벽 + 추가 측점 · 켬) · 영향 시험 170 + 추천 125 + 시설 416 통과 · golden 그대로 · typecheck 0 · 영향 범위 확인(run_section_generation · resolve_extra_stations · 따라감 · _carry_profile · replan_route 부르는 곳 grep) · 화면(검증_sub7 · 5182) 끔 · 켬 [적용] 정본 = 미리 셈 계획고 차 0 · 꼭짓점 · 직선화 같음 · L 20 · R > 500 0 · 손 종단 편집 [저장] 뒤 같은 노선 [적용](모달) = 편집 빔 · 차 0 · ▲ 편집 뒤 [초기화] = 적용한 종단 · B05 표 = B06 = 새로고침(누가토량 −7,211.2) · 같은 노선 L형 측구 [저장] → [적용] = 기본 측구 · 겹친 [적용] 뒤 요청 waited · DB 행 · storage 되돌림 차 0 · 검증 대기. +- [x] 476-2 화면(sub1) — 추천 모달 종단 그림에 「적용될 초기 종단」 선(주황 점선 · 끔 = 지반선 + 초기 종단) · 범례 · 한 줄(꼭짓점 · 종단곡선 · 직선화 · 최대 종단경사(L) · 알림 N건 · 알림 글은 마우스 올림) · 실패면 이유 한 줄 · `initial_profile` 세션에 안 적음 · [적용] = 확인 창(「종단 · 횡단 손 입력이 모두 지워지고 이 노선 기준으로 새로 시작」 · 요구 277). + - 검증완료 — test_476_2 4 · 추천 영향 시험 72 통과(golden · 476-1 포함 · 빨강 1 = test_modal_top_and_add_word M02_SO_Text 「종류 더하기」 · 내 고침 밖) · typecheck 0 · 화면(검증_sub1 · 5174 · sub7 merge) 다섯 알약 선 · 한 줄 · 끔/켬 선 바뀜 · 끔 [적용] 뒤 B05 종단 = 모달 선 측점 57/57 계획고 차 0.046 mm · 켬 0.048 mm · 꼭짓점 57 = 57 · 편집 빔 · L 20 · R > 500 0 · 페이지 캐시 같음 · 옛 노선 초안 칸 없음 · 밝음 · 어두움 주황 선 · DB 행 · storage 되돌림 차 0 · 검증 대기. + +## 477. 요구 272~277 장 마무리 (브레인) — (일부 · 남은 줄은 PLAN.md) + +- [x] 477-1 합치기 · 묶음 여섯 · typecheck · 장 시험 · 메인 서버 다시 켬 · 브레인 화면. +- 검증완료(477) — 472(0~6) · 473 · 475-1 · 475-3 · 476 메인 합침 · 묶음 여섯 · typecheck 0 · 장 시험 83 파일 606 통과 · 브레인 화면(검증_랩탑메인 · 저장 · [적용] 없음) 새 탭 · B06 · 새로고침 −17,570.7 · 57 · B05 · B06 보기 배관 삭제 ↶ ↷ ↶ 정본 · 배수유역도 복귀 · B06 열기만 = 떠남 확인 없음 · 추천 알약 다섯 초기 종단 선 · 한 줄 · 「셈하는 중」 글 · [적용] 확인 글 · 검증 대기. +- [x] 477-3 문서 운영 — docs 폴더 정리 · 가이드 · 자동 레퍼런스(사용자와 대화 중 · 외부 도구 조사 중). → 사용자 확정 = docs 는 raw 만 · guide 는 요청 때만 · 문서 사이트 · 위키 안 씀. + +## 478. 프로그램 문서 사이트 — 자동 추출 → 로직 묶음 → 페이지 (요구 278 · 시범 B05 · B06) + + +- 사용자 확정: 함수 · 변수는 문법대로 자동 추출 · 로직 묶음 · 페이지 문서도 추출 결과를 따라 바뀜 · 세 층을 사이트에서 위에서부터 눌러 내려가며 봄 · graphify · 짐작 위키 안 씀. +- 정함(브레인): MkDocs(Material) 사이트 · TS = ts-morph · 파이썬 = ast · 서버 주소 = FastAPI app.openapi() · 손글 = 묶음 「무엇을 하나」 한두 줄 + 페이지 규칙 · 사용자 결정만 · 추출이 바뀐 묶음 = 「설명 확인 필요」 표시. +- 폴더: `docs/mkdocs.yml` · `docs/tools/`(스크립트 · 자기 package.json · requirements) · `docs/guide/B05_B06/page.md` · `groups/*.md`(손글) · `docs/_data/`(추출 JSON · git 밖) · `docs/_build/`(원고 · 사이트 · git 밖) · 시험 `resources/tester/test_478_*`. +- 추출 꼴(`docs/_data/`): functions.json [{id: "ts:<파일>#<이름>" | "py:<파일>#<이름>", lang, file, line, name, exported, doc, params, returns, calls[], called_by[]}] · session_keys.json [{key, reads[], writes[]}] · api.json [{method, path, handler, callers[]}] · registry.json(계산 등록부 id · 실행 자리 · TS 함수 · 파이썬 짝). +- 정함(브레인 · 사용자 걱정 「직접 만든 생성기는 누락」) — 함수 화면 = 기성 도구(파이썬 mkdocstrings · TS TypeDoc) · 직접 만드는 것 = 묶음 · 페이지 · 흐름 · 세션 칸 · 서버 주소 짝만 · 누락 검사 = 기성 도구 목록 ↔ 우리 추출 목록 맞대기 · 모든 함수가 묶음 또는 「묶음 없음」에 나옴 · mkdocs build --strict. +- [x] 478-1 추출 스크립트 셋 + JSON(sub2). +- 검증완료(sub2) — 시험 6 통과 · ruff · prettier · 한 명령 14.3 s(ts 7.8 · py 1.7 · api 4.4) · 함수 5746(TS 4674 · 파이썬 1072) · 세션 칸 45 · 서버 주소 41(짝 없는 TS 글자 0 · 부르는 TS 없는 주소 1 = POST route/solve) · 등록부 45 · 세는 규칙 = docs/tools/README.md · 등록부 파이썬 짝 범위 밖 2(B04 ford_height_m · B07 route_frame) · 검증 대기. +- [x] 478-2 묶음 규칙 · 사이트 생성 · 손글 옮김 · 검사 시험(sub3 · 478-1 꼴로 동시). +- 검증완료(478-2) — test_478_docs 9 통과(가짜 3 · 진짜 6) · 함수 5,746 · 묶음 18 · 묶음 없음 0 · 세션 칸 45 · 서버 주소 41 · 손글 함수 빠짐 0 · TypeDoc ↔ ts-morph · griffe ↔ ast 차 0 · mkdocs --strict 경고 0 · 설명 없는 export 381(경고) · 원고 40 s + 사이트 50 s · 화면 3,021 쪽 · 함수 화면 = TypeDoc HTML · mkdocstrings · 검증 대기. +- 사용자 결정(10-19) — 문서 사이트 운영 안 함(사용자 · AI 둘 다 도움 적음 · 토큰만 듦) · docs/tools · mkdocs.yml · 시험 478 둘 · 문서 도구 지움 · docs = guide · raw 만. +- [취소] 478-4 개발 중 누락 막기 — 검사 빨강 조건(묶음 없음 > 0 · 설명 확인 필요 남음 · 짝 없는 세션 칸 · 서버 주소 · 범위 밖 새 페이지 폴더) · 자동 push 스크립트에 빠른 문서 검사(추출 시간 재서 가능하면) · 브레인 합침 문 시험에 넣음(빨강이면 안 합침). +- [x] 478-3 브레인 확인 — 추출 21 s · 원고 + 사이트 137 s · 함수 5,746 · 묶음 18 · 묶음 없음 0 · 설명 없는 export 381 · 페이지 화면(묶음 카드) · 묶음 화면(설명 · 흐름 · 함수 목록) 잘 섬 · 흠 = 페이지 「묶음 사이 흐름」이 호출 수 전부를 그려 읽을 수 없음 · 묶음 안 흐름도 빽빽함. +- [취소] 478-5 흐름 그림 손봄 — 페이지 = 데이터 흐름 차례(노선 → 측점 → 지반 → 종단 → 횡단 → 토량 → 저장) 왼→오 · 공용 도구 · 페이지 틀 · 가게 같은 바탕 묶음은 그림에서 뺌 · 약한 선(호출 적음) 숨김 · 묶음 안 = 입구 함수 · 주요 단계만(나머지는 목록). + +## 479. B06 횡단 왼쪽 아래 정보 칸 — 처음 빈 칸 · 고른 것만 (요구 280-1 · sub3 · Opus high) + + +- 정함(브레인): 고른 것 없음 = 빈 칸 · 선 · 암경계 고를 때만 그 정보 · 오른쪽 「암 절토」 칸 그대로 · 벽 · 본체 · 면적 고름 = 빈 칸 · 근거 `docs/raw/조사/2026-10-19_요구280_A_B06정보칸_드롭다운.md` 1~2장. +- [x] 479-1 — `B06_Section_UI_Cross_Design_Pick.ts:632` 기본 암 갈래 → 암 고른 때만 · `_Cross_Card_Chrome.ts:177-182` 갈래 · 죽은 함수 걷음 · 확인: `test_370_3_rock_cell` · `test_318_cross_card` 고쳐 씀 + 화면(새 탭 · 새로고침 = 빈 칸 · 선 · 암 고름 = 정보 · 풂 = 빈 칸 · B05 우측 판 그대로). + - 검증완료(sub3) — 시험 9 파일 62 통과 · typecheck 0 · 화면 검증_sub3 카드 59 = 처음 · 새로고침 정보 칸 0 · 암 점선 고름 = 「암 경계 -0.5m」 1 · ▲ = -0.4 · ↺ = -0.5 · 사면 고름 「사면 이동 (우)」 · 다시 누름 = 0 · 어두움 같음 · B05 우측 판 발 줄 0 · 검증 대기. + +## 480. 전역 드롭다운 — 마우스로 고르면 초점 뺌 (요구 280-6 · sub5 · Opus high) + + +- 정함(브레인): 마우스로 고른 때만 한 박자 뒤 blur(키보드 훑기 그대로) · 드롭다운만(숫자 칸 뺌) · B08 이정 상자 = 고르면 저장 · 닫힘 그대로 · 근거 분석 A 3~5장. +- [x] 480-1 — `ui_template_native_menu.ts` 함수 하나 + 부름 셋(`A00_Common/main.ts` · `ui_template/cad_host/cad_host.ts` · `design_profile_popout.ts`) · CAD 앱 빌드 없음 · 확인: 고치기 전 휠 · ↓ 재현 → 새 시험(마우스 고름 뒤 초점 빠짐 · 키보드 고름 초점 남음) + 화면(B05 · B06 · B07 리본 · B08 · M02 각 하나 · 고른 뒤 휠 · ↓ = 값 그대로). + - 검증완료(9a8ff3ee8) — 시험 test_280_6 4 · 이웃 원본 시험 통과 · typecheck 0 · 고치기 전 B05 간격 고른 뒤 ↓ = 10 m → 측점 No. 바뀜(초점 SELECT) · 휠은 orca 가 select 위 휠을 못 쏨(재현 못 함) · 뒤 B05 · B06 구조물군 · B07 리본 선종류(iframe) · B08 수리 재현기간 · B09 쉬는 날 · M02 별칭 장부 갈래 = 고른 뒤 초점 BODY · ↓ 값 그대로 · 키보드 고름 = 초점 SELECT 남고 값 바뀜 · 어두움 같음 · 값 되돌림. + +## 481. B05~B09 왼쪽 패널 아래 [?] [<] [>] 페이지 이동 (요구 280-2 · 481-1 sub2 · 481-2 sub5 · 481-3 sub6 · Opus high) + + +- 정함(브레인): 줄 = [?] [<] [>] + 그 페이지 단추 · [<] [>] = 이웃 진행 단계 단추 누름(`onStepClick` 한 길 · ☰ · 단계 판도 같은 저장 후 이동) · B05 ↔ B06 = 저장 없이 화면만 · B05 [<](B04) · B06 [>](B07) = 지금 떠남 물음 그대로 · B07 · B08 · B09 = 보이는 화면 저장 성공 뒤 이동 · 실패면 머묾 · B09 [>] 흐림 · [?] 는 이미 다 있음(설명 `resources/help/B0N/00_설명서.md` = 사용자) · 근거 분석 B. +- [x] 481-1 공용 + B05 · B06 — `ui_template_help.ts` · `ui_template_workflow_layout.ts` · `design_dock.ts` · `design_shared.ts`([노선 보기] · [횡단 보기] 지움) · 확인: `test_design_view_parity` + 새 시험(차례 · 다섯 주소만 · B09 흐림) + 화면. + - 검증완료 — 시험 81 통과(`test_280_2_step_nav` 새 · `test_design_view_parity` 외) · typecheck 0 · 화면(검증_sub2): B05~B09 줄 [?] [<] [>] 32×32 · 넘침 0 · B05 ↔ B06 = 페이지 안 다시 실음(표시 남음 · 저장 요청 0) · B09 [>] 흐림 · 밝음 · 어두움 · 검증 대기. +- [x] 481-2 B08 · B09 저장 후 이동(480 뒤) — 저장 함수 다섯 성공 여부 돌려줌 · B08 = 왼쪽 옵션 + 지금 탭 · 떠난 탭 `host.isConnected` · 확인: 새 시험 + 화면(고침 → [>] → [<] = 값 남음 · 저장 실패 = 머묾). + - 검증완료(197f5b589) — 시험 test_481_2 6 · B08 · B09 이웃 원본 시험 303 통과 · typecheck 0 · 화면(검증_sub5 · ☰): B08 연암 90 → 85 + 수리 재현기간 100 → 50 → B09 = options · hydro PUT 뒤 이동 · 캐시 빔 → B08 = 85 · 50 남음 · 1본 빈칸 → 머묾 · 요청 0 · 알림 · B09 쉬는 날 → B08 = estimation PUT 1 → B09 = 값 남음 · storage 새 파일 넷 지워 처음과 같음. +- [x] 481-3 B07 저장 후 이동 — 484-2 와 한 커밋 · 자동 B08 이동(`all_confirmed`) 끔. + - 검증완료(sub6) — 고친 장만 confirm 1 + complete 1 → B08 · confirm 실패 = 머묾(● 남음) · B08 → B07 = 고친 장 60 개체 그대로 · 잠금 없음 · 단계 4 COMPLETE · 검증_sub6 되돌림. + +## 482. 노선 바뀜 뒤 구조물 측점이 옛 자리에 남음 (요구 280-3 · sub4 · Opus high) + + +- 사용자 확정(요구 281): 사용자는 노선 고칠 때 ↶ 안 씀 → 원인 1 은 고치되 사용자 길(끌기 · R · 교점 더함 · 지움 · B06 평면 패널 · [저장] · 새로고침 · [초기화] · 추천 [적용])을 화면에서 먼저 찾음. +- 정함(브레인): 원인 1 = 노선 초안 중 ↶ · ↷ 가 계획고만 되돌리고 관 · 구조물 · 추가 측점은 안 넣음(재현 유령 7 · 빠짐 7) → 그 걸음 세션 값을 같이 넣음 · 원인 2 = 옛 비정규 측점 이관이 「기타 구조물」을 만듦 → 막이(이름 빈 측점 · 낡은 종단 건너뜀 · 저장 잠금) · 이미 생긴 것 = 목록 알림만 · 원인 3(옛 틀 · 새 틀 누가거리 견줌) 같이 · 근거 `docs/raw/조사/2026-10-19_요구280_C_노선바뀜_구조물측점.md`. +- [x] 482-1 브라우저 — `design_pipeline_page.ts:290`(691줄 · 넘으면 `Pipeline_Grade.ts`) · `B06_Section_Section_Drafts.ts` · 확인: 고치기 전 화면 재현 먼저(끌기만 · ↶ 포함 둘) → 새 `test_280_3_route_undo_facilities` + 분석 5장 기존 시험 + 화면(네 벌 측점 같음 · 유령 0 · 빠짐 0). + - 검증완료(검증 대기) — 고치기 전 화면: 끌기 · 방향키 · R · 교점 더함 · 지움 · 손 옮김 뒤 끌기 · 스냅 끔 · B06 평면 끌기 · B05↔B06 · 새로고침 · [저장] · [초기화] · 추천 [적용] = 유령 0 · ↶ 만 유령 6 · 빠짐 6 → 고친 뒤 ↶ · ↷ · 관 손 옮김 뒤 ↶ = 네 벌 같음 · [저장] 뒤 GET 같음 · 새 시험 11 통과(옛 코드 ↶ 넷 실패) · typecheck 0 · 원인 3 = 상세 틀(옛 · 새)을 넘겨 견줌. +- [x] 482-2 서버 — `B05_Profile_Structures_Migration.py` · `_Structures_Router.py` · `B06_Section_Router_Stations.py` · 확인: 새 `test_280_3_migrate_guard`(임시 storage) + `test_452_server_keys_prune_migrate` · `test_272_2_station_sync`. + - 검증완료(검증 대기) — 새 시험 6 통과(옛 코드 다섯 실패) · 452 · 272-2 · 322-0 · 449 · 407-3 · 428 · 445 · 472-6 함께 통과 · 화면: 검증_sub4 이관 응답 `legacy_etc` [] · 파일 쓰기 0 · 「기타 구조물」 = B05 경고 알림만(안 지움) · 맞춤 실패 = `StationsUnsynced` → 응답 `stations_synced` 거짓. + +## 483. B05 스냅 — 20 m 일반측점 그대로 · MC 특별측점 더함 · 1 m · 0.1 m 지움 (요구 280-4 · sub1 · Opus high) + + +- 정함(브레인): 스냅이 일반측점을 MC 로 옮기지 않음 → 20 m 그대로 + MC 가 측점 위 아니면 「No.N+10 (MC)」(407 꼴) · 측점 No. 간격에서 못 맞춘 곡선도 같은 규칙 · 「유지」 = 그 곡선 MC 에 묶음(저장 칸 없음 · 손 안 댄 곡선은 다시 맞출 때 N+0 · N+10 그대로) · N+0 으로 옮기면 특별측점 없어짐 · 옛 간격 0.1 · 1 m = 측점 No. · 근거 `docs/raw/조사/2026-10-19_요구280_D_스냅_특별측점.md` · 지식DB 노선측량.md:143-144. +- [x] 483-1 옮김 지움 — 서버 `Core.py:397-398` ↔ TS `Sections_Stations.ts:292-299` · `SnapStep.ts:83-90` · 확인: `test_224_2` 고쳐 씀 · 새 `test_280_4_stations`(거울 다섯 경우). +- [x] 483-2 1 m · 0.1 m 지움 — 고르기 목록 · `STEPS` · `load_station_snap_step` · 상태줄 글 · 확인: `test_390_4` · `test_390_5` 고쳐 씀. +- [x] 483-3 유지 — `StationFit.ts` + `UI_RouteEdit.ts`(695줄 · 셈은 StationFit) · 확인: 새 `test_280_4_fit` · `test_366_3` · `test_383_2` · `test_408` + 화면(10 m · MC N+10 = 20 m 목록 + N+10 (MC) · 앞 교점 옮김 뒤 남음 · N+0 = 없어짐) · 검증_sub8 옮긴 측점 11 곳 = 다음 [저장] 때 바뀜. +- 검증완료(sub1) — 시험 관련 21 파일 182 통과 · typecheck 0 · 서버 Node 묶음 셋 다시 지어 바뀐 셈 0 건 · 화면(검증_sub1): 고르기 = 10 m · 측점 No. 둘 · 10 m 로 11번 밈 = 410 (MC) + 20 m 빠짐 0 · 측점 No. 로 바꿈 · 앞 9번 20 m 옮김 뒤 410 남음 · [저장] 뒤 서버 측점 58 = 화면 58 · 11번 N+0 = 곡선 측점 0 · 고정 곡선 못 맞춤 = 「측점 밖 곡선 1개」 + 423 (MC) · 20 m 그대로 · 저장본 · DB 행 되돌림. + +## 484. B07 좌측 패널 ⚙ 설정 · 모달 · [현재 도면 확정] 지움 (요구 280-5 · 280-6 · sub6 · Opus high) + + +- 정함(브레인): 공용 `createPanelCard` 에 ⚙(캐럿 왼쪽 · 누름이 접힘 안 일으킴) · 컨테이너 없는 항목 = 단추 안 오른쪽 · 표지 없음 · 모달 = 공용 `openModal` · 평면도 ⚙ = [평면도 관리] 모달(단추 지움) · 횡단도 ⚙ = 배치 행열 ~ 안내선 숨기기 그대로 옮김 · 구조물 ⚙ = 「M02 그림 — 축척 없음」 · 근거 `docs/raw/조사/2026-10-19_요구280_E_B07설정_화면정리.md` 3 · 4.5장. +- 사용자 확정(요구 281): 확정 = 잠금 없음 — [현재 도면 확정] · [수정] 지움 · [>] · 페이지 이동 = 고친 탭(●) + 지금 탭 저장 → 단계 4 완료 → 이동 · 원본 되돌림 = ⚙ [원본에서 다시 그리기]. +- [x] 484-1 ⚙ · 모달 — 새 `B07_DesignDetail_UI_Settings.ts` · `ui_template_collapsible.ts` · `_UI_Panels.ts` · `_UI_PlanKinds.ts` · `_UI_Development.ts` · 확인: 시험 + 화면(⚙ 자리 · 접힘 안 됨 · 모달 칸 = 옛 칸 값). + - 검증완료(sub6) — 카드 ⚙ 5 + 토적 단추 ⚙ 1 · 표지 0 · 제목 높이 14 px 전후 같음 · 누름 = 접힘 · 탭 그대로 · 횡단 모달 4 · 4 · 1 = 서버 값 · 평면도 ⚙ = 평면도 관리 · 밝음 · 어두움. +- [x] 484-2 확정 단추 지움 + 481-3 + 탭 줄 겹판 페이지 쪽(486 과 `--cad-tab-slot-left/right` 약속) — `_UI_Page.ts`(633줄 → 저장 · 확정 묶음 새 파일) · 서버 단계 4 완료 길 · 확인: 시험 + 화면. + - 검증완료(sub6) — `test_280_5_b07_settings` 9 + 기존 9 파일 57 통과 · typecheck 0 · 「현재 도면 확정」 글 0 · [원본에서 다시 그리기] 60 → 204 개체 · 저장본 풀림 · 탭 줄 겹판 흉내(left 300 · right 120) = 높이 26 · 위 0 · 값 지우면 제자리. + +## 485. B07 도면 X · Y 축척 (요구 280-5 · sub8 · Opus high) + + +- 정함(브레인): 종단 · 횡단 · 토적 · 전개도 X · Y 분모 숫자 칸(정수 · 범위 검사 · 기본 = 지금 `config_system` 상수 · 토적 · 전개도 「자동」 남김) · 횡단 X ≠ Y 허용(기본 1/100 · 1/100) · 표준 횡단 뺌 · 프로젝트마다 `drawing_scales.json` · 바꾸면 그 종류 저장본 n 장 묻고 다시 그림 · 근거 분석 E 3.4 · 지식DB `설계제원_총괄.md` 8장. +- [x] 485-1 서버 — 새 `B07_DesignDetail_Router_Support_Scale.py`(GET/PUT) · `Engine_Template.py` `drawing_scale(kind)` · 엔진 상수 → 함수 · 횡단 덧그림 `mm_per_m` 둘로(TS · Node 묶음 둘 다시 지음) · 확인: 분석 E 3.4-3 시험 여섯 + 새 시험. + - 검증완료 — 시험 83 통과(여섯 + B09 인쇄 · 전개도 · 새 `test_280_5_b07_drawing_scales` 10) · typecheck 0 · 검증_sub8 API(종단 X 1/500 = 장 2→3 · 첫 점 x 1.0→2.0 mm · 도각 「500(H) · 200(V)」 · 횡단 mm/m 10·20 · 도각 「100(H) · 50(V)」 · 범위 밖 400 · 파일 지움 뒤 원래 값) · 검증 대기. +- [x] 485-2 ⚙ 모달 축척 칸(484-1 합친 뒤) — `_UI_Settings.ts` · `_Api_Fetch.ts` · 확인: 화면(종단 X 1/500 → 장 수 바뀜 · 되돌림). + - 검증완료 — 새 `_UI_Settings_Scale.ts` · `logic/_Scale_Check.ts` · `test_280_5_b07_settings` 12 통과 · typecheck 0 · 검증_sub8 화면(종단 X 1/500 = 장 2→3 · 도각 「500(H) · 200(V)」 · 횡단 X 100 · Y 50 = 「100(H) · 50(V)」 · 1/50 · 500.5 = 칸 붉음 + 저장 꺼짐 · 전개도 「자동」 둘 · 풀면 빈 칸 붉음 · 저장본 1장 물음 [취소] = 그대로 · 새로고침 뒤 200 · 50 남음 · 밝음 · 어두움 · [기본값] 저장 = 장 3→2 · 파일 지움) · 검증 대기. + +## 486. B07 CAD 화면 정리 — 머리 줄 · 겹친 단추 지움 (요구 280-6 · sub7 · Opus high) + + +- 정함(브레인): 제목줄(「Aislo CAD / B07 상세 설계」) · 램프 · 「현재 도면」 글 지움 · 저장 · JSON 내보내기 = 숨김(DOM 둠) · ↶ ↷ = 홈 탭 줄 오른쪽(줄 높이 26 px 그대로) · 페이지 탭 줄 = 출력 탭과 같은 줄(부모 탭 줄을 iframe 위에 겹침) · 우측 손가락 단추 = 자판 없는 기기만(`(hover:none) and (pointer:coarse)`) · 하단 도면 이름 · ‹ › · 확정 칸 지움 · 근거 분석 E 4장. +- [x] 486-1 — `QuickAccessBar.tsx` · `Toolbar.tsx` · `Ribbon.tsx` · `ribbon.config.ts`(QUICK_ACCESS 몫) · `App.tsx` · `QuantityPanel.tsx`(지움) · `input-touch.*` · `host-burger.*` · `App.css`(제목줄 · `.cad-tool` 몫) · 확인: `test_cad_touch` · `test_cad_host_tabs` 고쳐 씀 · `npm run build` · 화면(CAD 높이 ≈ +74 px · 홈 탭 줄 높이 전후 같음 · M02 · 미리보기 CAD 그대로). + - 검증완료 — 캔버스 높이 846 → 888 px(CAD 몫 +42 · 부모 탭 줄 겹침 +32 = sub6) · 리본 탭 줄 26 = 26 · ↶ ↷ 24×20 탭 줄 안 · 💾 ⭳ 숨김 · 손가락 단추 none(터치 노트북 any-pointer coarse) · 하단 칸 0 · 자리 변수 255 · 91 px · M02 구조물 CAD · 평면도 미리보기 그대로 · `test_cad_touch` · `test_cad_host_tabs` · `test_m02_drawing_card` 통과. + +## 487. CAD 글자 테두리 = 입력 칸 · 리본 아이콘 하나만 켜짐 (요구 280-6 · sub7 486 뒤 · Opus high) + + +- 정함(브레인): 스침 테두리 = 더블클릭 입력 칸과 같은 셈(새 `helpers/text-frame.ts` 한 벌) · 잡는 범위 = 테두리 안 · 여러 줄 = 묶음 전체 · 도각 칸 글 = 칸 크기 · 스침 모양 = 바탕색만(켜짐과 다르게) · 초점 테두리 남음은 화면 재현 뒤 · `getBoundingBox` 안 고침 · 근거 `docs/raw/조사/2026-10-19_요구280_F_CAD동작_DWG.md` 1~2장. +- [x] 487-1 — `TextEntity.ts` · `text-inplace-edit.ts` · `screenCanvas.drawController.ts`(691줄) · `input-controller.ts` · `Ribbon.tsx` · `QuickAccessBar.tsx` · 확인: 새 `text-frame.test.ts` · `text-inplace-edit.test.ts` + 화면(왼 · 가운데 · 오른 · 돈 글 네 귀 차 ≤ 1 px · 켜짐 1개). + - 검증완료 — 스침 테두리 네 귀 대 입력 칸 차: 가운데 0.018 · 왼(돈 글) 0.023 · 오른 0.017 px · 끝 글자 스침 = 그 글 · 「선」 → Esc 뒤 켜짐 1개(선택) · 스친 단추 테두리 없음(바탕만) · 초점 테두리 0(블러 전 재현: 클릭 + Esc = 1) · 밝음 · 어두움 · 스침 1.75 ms/번(813 개체) · `text-frame.test.ts` 12 · `text-inplace-edit.test.ts` 7 · typecheck 0. + +## 488. CAD 이름 · 선 속성 · 안내 글 · DWG 불러오기 (요구 280-6 · sub3 479 뒤 · Opus high) + + +- 정함(브레인): 「선가중치」→「선 두께」 · 「도면층」→「레이어」(CAD 안 글 · 툴팁 · 명령 목록 · 토씨 손봄 · 저장 열쇠 그대로) · 색 · 두께 · 선종류 = 고른 것의 값(다르면 빈 칸 · 색 = 점선 빈 견본) · 고른 것 있으면 고른 것만 바꿈 · 없으면 그리기 기본값 · 특성 판 같은 규칙 · 되돌리기 한 번(같은 흠 명령 8개 같이) · 폴리선 자식까지 · 안내 글 = 한 줄 「DWG · DXF 파일을 끌어다 놓거나 [삽입 → DWG 불러오기]」 · [DWG 불러오기] = M02 와 같은 서버 변환 · 원좌표 · 골라진 채 · 화면 맞춤 · ByLayer = 레이어 색(M02 불러오기도 같이) · 근거 분석 F 3~6장. +- [x] 488-1 이름 · 안내 글 — 확인: `command-catalog.test.ts` + 「도면층 · 선가중치 없음」 한 줄 + 화면 innerText 0. +- [x] 488-2 선 속성 = 고른 것 — 새 `helpers/selection-style.ts` · `RibbonWidgets.tsx` · `PropertiesEditor.tsx` · 확인: 새 `selection-style.test.ts` + 화면(다른 선 둘 = 빈 칸 · 고름 = 둘 다 · Ctrl+Z 한 번). +- [x] 488-3 DWG 불러오기 — `commands.insert.ts` · `ribbon.config.ts`(삽입 탭 몫) · `dxf-clip-paste.ts` · `Engine_Frame_Import.py` · 확인: `dxf-clip.test.ts` · `test_b07_dxf_clip.py` + 화면(DWG 붙음 · Ctrl+Z 한 번) · 겹침 486 · 487 = `App.css` · `ribbon.config.ts` · `DropHint.tsx` · `Ribbon.tsx` 몫 나눔. + - 검증완료(sub3) — 시험 command-catalog 5 · selection-style 6(옛 제자리 고침이면 Ctrl+Z 빨강) · dxf-clip · test_b07_dxf_clip 7 · 이웃 frame_import 15 통과 · check-types 0 · 화면 B07 검증_sub3 innerText 도면층 · 선가중치 0(홈 · 삽입 · 주석 · 뷰 · 출력 · 레이어 관리자 · 왼쪽 특성 판 · ▾) · 다른 선 둘 = 두께 · 선종류 빈 칸 · 색 점선 빈 견본(밝음 · 어두움) · 두께 3 = 둘 다 · 그리기 기본값 1 그대로 · Ctrl+Z 한 번 = 옛 값 · 색 끌기 셋 → Ctrl+Z 한 번 = 옛 색 · 안내 글 높이 20 px · 넘침 0 · DWG(REpyo) 도형 21 붙음 · 골라진 21 · 새 레이어 0 · 화면 안 · Ctrl+Z 한 번 = 101 → 101 · M02 [파일 업로드] ByLayer = #ff7f7f(옛 #f5f7fa) · 저장 안 함(새로고침 = 185 그대로) · 검증 대기. + +## 490. B05 종단 그래프 — 누르면 임시 횡단이 열리는 자리에 마우스 표시 (요구 282 · sub2 481-1 뒤 · Opus high) + + +- 정함(브레인): 표시 자리 = 누름이 임시 횡단을 여는 자리와 같은 판정(`B05_Profile_UI_Profile_Render.ts:329-346` · `groundPickAt` 허용 거리 · 추가 측점 선) · 근처면 그 선 위 작은 원 + 세로 점선 + 측점 글(예 「No.12+5 · 눌러 임시 횡단」) · 손가락 커서 · 멀어지면 사라짐 · 측점선 · 단추 위에선 안 보임(그 몫) · 밝음 · 어두움 색 · 끌기 · 스크롤 중엔 안 그림. +- [x] 490-1 — `B05_Profile_UI_Profile_Render.ts`(524줄) · 판정 셈은 `logic/` 한 함수로 누름과 같이 씀 · 확인: 새 시험(판정 함수 = 누름 판정 같은 값 · 허용 밖 null) + 화면(검증_sub2 · 원지반선 근처 = 원 · 측점 글 · 누름 = 같은 측점 임시 횡단 · 멀리 = 없음 · 추가 측점 선 · 팝아웃 종단 · 밝음 · 어두움). + - 검증완료 — 시험 4 통과(판정 = 옛 누름 9 경우 같은 값 · 허용 밖 null) · typecheck 0 · 화면(검증_sub2 · 실제 마우스) 원지반선 ±7 px = 원 · 측점 글 · 손가락 / ±9 px = 없음 · 표시 측점 = 누름 임시 횡단 측점 4 곳 같음(6+8 · 6+10 · 6+17 · 9+14) · 추가 측점 선 6+17 표시 · 누름 같음 · ▲ 단추 · 끌기 · 스크롤 · [직선화] 중 = 없음 · 팝아웃 종단 7+1 표시 = 누름 · 밝음 · 어두움 색 바뀜 · 검증 대기 + +## 491. 다음 장 후보 (요구 280 장에서 창이 찾은 것 · 장 끝에 한 번에) + + +- [x] 491-1 B05 · B06 — B06 [>] 고침 있을 때 떠남 물음 화면 미확인(481-1) · 🏠 · 뒤로 가기는 저장 안 함(481-2 · 분석 그대로) · 서버 종단 이름 「STA.0+410.000 (MC)」 ↔ 화면 「20+10 (MC)」 꼴 다름(483) · 옛 세션 초안 간격 0.1 · 1 m 브라우저만 소수 MC(483) · [저장] 이 route_recommend 캐시 10 개 새로 씀(483) · 고른(빨강) 추가 측점 선은 --plus 클래스 빠져 누름 · 표시 안 먹음(490). → 505~507 로 옮김(요구 309 조사 · 끝난 조각 걷음) +- [x] 491-2 B07 · CAD — `UI_Page.ts` navigateDrawing · `cad_host` onNavigate 죽은 길 · `state.ts` cad-host-save 클래스 남음 · 리본 탭 단추 클릭 + Esc 초점 테두리(487) · 그립 · cloneKeepingLook vitest 빨강(전부터 · flatten) · M02 카드 미리보기엔 [삽입 → DWG 불러오기] 안 닿음 · 특성 판 색 끌기 되돌리기 칸 연발 · LAYMRG 제자리 고침 · 확정 도면 DWG 막힘 화면 미확인(488) · 페이지 navigateDrawing 걷음(484). → 505~507 로 옮김(요구 309 조사 · 끝난 조각 걷음) +- [x] 491-3 서버 · 기타 — 축척 주소 `/api/projects/{id}/drawing-scales`(cross-layout 꼴) · 커밋 제목 앞 BOM 한 글자(Out-File) · `main.py` 805줄(700 넘음) · orca 가 select 위 휠을 못 쏴 휠 재현 못 잼(480) · 검증_sub8 B05 노선을 누가 다시 확정(13:48 UTC · sub8 아님) · 개발 잠금풀기 중 축척 저장 = 우회 표식 지워져 잠김(개발 전용) · 축척 칸 붉은 글이 X 칸만 밀어 Y 칸과 높이 어긋남(485-2) · 검증_sub7 storage 없어 356-4 · 349-0 시험 늘 건너뜀 · 옛 시험 헬퍼 가짜 모듈 낡음(482) · dxf-clip.test.ts 픽스처 상대 경로라 openwebcad 에서 돌면 빨강(전부터). → 505~507 로 옮김(요구 309 조사 · 끝난 조각 걷음) +- [x] 491-5 횡단 구조물 형상(494) — 노출형 횡단수로 = 횡단 그림 부품 없음(측점도 안 섬 · 모양은 사용자 협의로 정해야 만듦) · B05 종단 원지반 누름 임시 횡단 = 간이 그림이라 구조물 구간이어도 형상 안 얹음 · B05 「횡단」 판은 카드 머리를 걷어 「⚠ 배관 관경 빈칸」 칩이 안 보임(`B05_Profile_UI_RouteEdit_Cross_Card.ts:150`) · B05 에서 고른 측점으로 B06 넘어가면 고름은 이어지나 카드 목록이 0+0 에 머묾(스크롤 안 됨). → 505~507 로 옮김(요구 309 조사 · 끝난 조각 걷음) +- [x] 491-4 노선(492 · 493) — 노선 [저장] 직후 페이지 통째 새로 고침(전부터) · test_472_6_route_save 묶어 돌리면 가끔 실패 · 추천 [적용] 첫 HTTP keep-alive 끊김(미리 셈 동기 계산이 루프 막는지) · 분석 지형 = 수치지형도인데 sheet 지표면 모델 없으면 손 고침 [저장] 실패(switch_design_terrain · 검증_sub1) · test_b06_draft_pipe_replay 482-1 뒤 옛 문구(전부터 빨강). → 505~507 로 옮김(요구 309 조사 · 끝난 조각 걷음) + +## 489. 요구 280 마무리 (브레인) + + +- [x] 489-1 합치기 · CAD 빌드 · 서버 묶음 · typecheck · 장 시험 · 메인 서버 다시 켬 · 다음 장 후보. +- 검증완료(489) — 479 · 480 · 481-1~3 · 482 · 483 · 484 · 485-1~2 · 486 · 487 · 488 · 490 메인 합침 · 장 시험 68 파일 401 통과 · 49 건너뜀 · CAD vitest 30 통과 · typecheck 0 · CAD 빌드 · 묶음 둘(b07-extent · print_drawings) · 메인 서버 다시 켬 · 482 사용자 길 = ↶ 말고 재현 0(후보 = 옛 이관 「기타 구조물」 · [초기화] 되살림 · 초안 둔 채 새로고침 — 막이 · 알림 들어감) · 검증 대기. + +## 492. 노선 모양 바뀐 [저장] = 초기화 + 초기값 다시 세움 (요구 283 · 284 · 285 · 492-1 sub4 · 492-2 sub1 · Opus high) — (일부 · 남은 줄은 PLAN.md) + +- [x] 492-1 서버(sub4) — `_save_route` 초기화 갈래(추천 [적용] 길과 한 벌) · `/design/save` 초기화면 브라우저 시설 · 넘김 칸 무시 · 초기값 사본 되돌림 범위 · 공유 storage 시험 셋 임시 사본 · 확인: 새 `test_283_route_change_reset`(옛 코드 ① ② ④ ⑤ 실패) + 따라감 기대 시험 아홉 고쳐 씀. + - 검증완료(492-1 · 7a857d626) — 판정 = 저장 · 새 계획 폴리라인 1 mm(`route_shape_changed` · TS 짝 `routeShapeChanged` = 492-2) · test_283 9 통과(옛 코드 8 실패 · 검증_sub8 자료 관 [388, 394] → [388]) · 관련 시험 117 + 실DB 472-6 둘 16 통과(storage 임시 사본) · typecheck 0 · 검증_sub4 API(storage 사본 · DB 되돌림): 스냅만 = reset false · 시설 그대로 / 교점 20 m = reset true · dropped 구조물 1 · 관 2 · 추가 측점 1 · 관 = 교차 하나(옆 0.00 m · 옵션 없음) · 종단 편집 0 · 보낸 추가 측점 무시 · 초기값 관 = 작업본 · 검증 대기. +- [x] 492-2 브라우저(sub1) — 판정 함수(logic/) · 초안 띠 · [저장] 확인 창(버릴 수) · [취소] = 요청 0 · 저장 뒤 알림(dropped) · 확인: 새 `test_283_route_reset_confirm` + 화면(분석 7장 목록). + - 검증완료(492-2 · d2bf68b59 · 6dfadcbd4) — test_283_route_reset_confirm 28 통과(거울 = 파이썬 `route_shape_changed` 같은 값) · 저장 헬퍼 시험 셋 · 관련 시험 111 통과 · typecheck 0 · 화면(검증_sub1): 교점 22.4 m 끌기 = 띠 · [저장] 창 「구조물 1 · 관 1 · 추가 측점 1 · 종단 편집 1」 · [취소] = 요청 0 · 저장 뒤 관 = 교차 하나(351 · 옆 0.000 m · 옵션 없음) · 구조물 · 추가 측점 0 · 종단 편집 0 · 측점 = 격자 54 + 곡선 17 + 교차 관 1 · R 바꿈 · 교점 더함 · 지움 · B06 평면 패널 끌기 = 띠 · 창 · 알림 「지움: 구조물 0 · 관 1 · 추가 측점 0 · 새 교차 관 1」 · 추천 [적용] 같은 글 · 수 · [초기화] = 같은 자료 · 스냅 끔 · 지형만 = 창 없음 · 밝음 · 어두움 · storage · DB 행 백업으로 되돌림 · 검증 대기. + +## 493. B05 [저장] = 보이는 화면 그대로 · 초기화 기준 = 노선 추천 [적용] (요구 288 · 289 · 290 · 492 손 고침 초기화 걷음 · 493-1 sub4 · 493-2 sub1 · 493-3 sub2 · Opus high) + + +- 사용자 확정(요구 289 · 290): B05 손 고침 [저장] = 보이는 화면 그대로(지움 없음) · 노선 고침 때 구조물 = 평면 자리 근접 · 일반 · 곡선 측점 = 거리 지킴 · 추천 [적용] = 초기화 기준(그 노선 초기값으로 새로 시작 · 사용자 구조물 지움) · [초기화] = [적용] 기준으로 되돌림. +- 정함(브레인): 자동 관도 구조물 규칙(평면 자리 근접) · 새 세류선 교차는 492 이전처럼 더함 · 길에서 멀어진 시설 = 화면 그대로(사용자 점검 · 경고 안 둠) · 손 고침 [저장]엔 띠 · 확인 창 · 초기화 알림 없음 · 추천 [적용] 확인 창(지워질 수)은 둠 · 492 판정 함수는 안 쓰게 되면 걷음. +- [x] 493-1 서버(sub4) — 손 고침 [저장](`_save_route` · `/design/save`) 초기화 갈래 걷고 492 이전 따라감 되살림 · 추천 [적용] 초기화 그대로 · [적용] 첫 시도 500(초기값 사본 뜨기 FileNotFoundError) 고침 · 확인: test_283_route_change_reset 고쳐 씀(손 고침 = 시설 따라감 · [적용] = 초기화) + 검증_sub4 API. + - 검증완료(493-1) — 손 고침 판정(`route_shape_changed`) · 한 본문 초기화 갈래 걷음 · `route_reset` = 추천 [적용] 응답만 · 500 원인 = [적용] 떠 두기 중 뒤 추천 미리 셈이 `_derived` 파일 지움 → 떠 두기가 사라진 파일 건너뜀 · test_283 10 · 관련 시험 382 + 실DB 472-6 둘 16 통과(storage 임시 사본) · typecheck 0 · 검증_sub4 API(떠 둠 · 되돌림): 교점 20 m · 교점 지움 [저장] = 구조물 1 · 관 2(id 그대로) · 추가 측점 1 · 초기값 그대로 · route_reset 없음 / [적용] 세 번 = 200 · 첫 번 지움 구조물 1 · 관 2 · 추가 측점 1 · 관 = 교차 하나 · 500 없음 · B05 화면 목록 배관 2 · 옹벽 그대로 · 검증 대기. +- [x] 493-2 브라우저(sub1) — 손 고침 띠 · [저장] 확인 창 · 저장 뒤 초기화 알림 걷음 · 추천 [적용] 확인 창 수 = 서버 지울 수(창 구조물 1 ↔ 알림 0 어긋남) · 확인: test_283_route_reset_confirm 고쳐 씀 + 화면(검증_sub1). + - 검증완료(493-2) — 띠 · [저장] 확인 창 · 저장 뒤 초기화 알림 · 초안 통째 비움 걷음 · [적용] 창 수 = 서버 저장분(구조물 · 관 저장 파일 · 추가 측점) · test_283_route_reset_confirm 7 · 관련 시험 371 통과(1 실패 = test_b06_draft_pipe_replay · 482-1 뒤 옛 문구 · 안 고친 파일) · typecheck 0 · 검증_sub1 ORCA(떠 둠 · 되돌림): 교점 끌기 → 띠 0 · 창 0 → [저장] = 구조물 1(620 m) · 관 1(351 m) · 추가 측점 1(450 m) 수 · 좌표 = 끌기 때 화면 그대로 · 노선 최대 1.58 m 바뀜 / [적용] 창 「구조물 1 · 관 1 · 추가 측점 1」 = 적용 뒤 알림 「지움: 구조물 1 · 관 1 · 추가 측점 1」 · [취소] = 저장 요청 0 · B06 평면 패널 띠 0 · 밝음 · 어두움 · 검증 대기. +- [x] 493-3 화면 ↔ 저장 자리(sub2) — 교점 끌기 중 화면 시설 · 측점 자리 = [저장] 뒤 서버 자리(굽은 곳 관 2~7 m 어긋남) · 브라우저 · 서버 따라감 짝 거울 시험 · 확인: 거울 시험 + 검증_sub2 교점 끌기 → [저장] 전후 관 · 구조물 · 측점 좌표 차 0.01 m 안. + - 검증완료 — 원인 = 추가 측점이 끌기 걸음마다 정수 m 자리에서 다시 따라감(서버 = 정본 좌표 한 번 · 2~4 m) · 관 · 구조물 재현 0 → 추가 측점도 좌표 들고 감(`followPlusGround` · GET `stations`) · test_493_3_follow_screen_save 7(고치기 전 대조 빨강) · 관련 42 파일 313 통과 · typecheck 0 · 검증_sub2 앞 · 곡선 교점 끌기 → [저장] → 새로고침 = 측점 61곳 좌표 차 0 m(관 1 · 구조물 3 · 추가 측점 4 · 초기화 없음) · 저장 안 하고 B06 다녀옴 · 새로고침 = 초안 그대로 · storage · DB 되돌림 차 0 · 2b7b12956(검증 대기). +- 정함(브레인 · 합친 판 확인 뒤): 관 = 모두 구조물처럼 땅 위 자리 고수 + 근접(요구 290) · 자동 세류선 관을 새 교차점에 다시 붙임 = 안 함(다음 장 후보 · 브라우저 세류선 + 짝 교차 셈 필요). +- [x] 493-4 관 저장 자리(sub2) — 합친 판 검증_sub1 손 고침 [저장] 뒤 관만 1.27 m 움직임(화면 208597.117 · 367731.865 ↔ 저장 208597.886 · 367732.872 · 구조물 · 추가 측점 0 m) · 원인 먼저 · 화면 = 저장 · 확인: 거울 시험 관 x · y + 검증_sub2 두 번 이어 고쳐도 0.01 m 안. + - 검증완료(493-4) — 원인 = 관 PUT 이 세부유역 계산을 거치며 속성만 되붙여 x · y 를 버림(`carry_facility_attributes`) → 저장이 노선 위 측점 자리로 채움 + GET 관 x · y = 노선 위 자리라 [저장] 다시 얹기가 베낌(검증_sub2 재현 0.62 m) · 되붙임에 x · y · 저장 = 좌표가 그 누가거리를 낳으면 땅 위 자리 그대로(누가거리만 옮긴 낡은 좌표 = 노선 위 · 구조물 규칙) · GET x · y = 정본 · 세류선 교차 다시 붙임은 안 함(브레인) · test_493_3_follow_screen_save 16(관 x · y 거울 · 두 번 저장 · 고치기 전 대조) · 관련 23 파일 158 통과 · typecheck 0 · 합친 판(4aeaa9442 포함) 검증_sub2 ORCA(떠 둠 · 되돌림 차 0): 세류선 관 · 사용자 관 · 구조물 · 추가 측점 → 교점 끌기 [저장] → 새로고침 = 화면 그대로(관 374 · 620 · 구조물 720 · 추가 측점 470 · x · y 차 0 m) · 한 번 더 고쳐 [저장] = 관 x · y 그대로(626 · 723 · 482) · 추천 [적용] 창 「구조물 1 · 관 2 · 추가 측점 1」 = 알림 같음 · 새로고침 없이 화면 = 서버(관 351 하나) · ORCA 는 [저장] 끝난 탭과 응답 끊김(화면 CPU 놂 · 새 탭은 정상) · 검증 대기. +- [x] 493-5 [적용] 뒤 화면 초안(sub1) — [적용] 직후 지운 추가 측점이 화면 목록 · 초안에 남고 그대로 [저장]하면 되살아남(실제 봄) · [적용] 뒤 세션 초안 = 새 초기값 · 확인: 시험 + 검증_sub1 추가 측점 둘 · 구조물 하나 → [적용] → 새로고침 없이 [저장] → 서버 0 그대로. + - 검증완료 — 원인 = 493-2 는 [적용] 길 초안 비움(`clearDrafts`)을 안 걷음 · 추가 측점 저장분 기억(모듈 캐시 · 따라감 기억)이 페이지 다시 세움에도 남아 옛 [127 · 163] 을 읽음 → [적용] 뒤 저장분 다시 받음(`reloadSavedPlusStations`) · test_283_route_reset_confirm 9(고치기 전 대조 = 옛 저장분 남음) · 관련 29 파일 211 통과 · typecheck 0 · 검증_sub1 ORCA(떠 둠 · 되돌림 차 0): 옹벽 1 · 추가 측점 127 · 163 [저장] → [적용] 창 「구조물 1 · 관 1 · 추가 측점 2」 → 새로고침 없이 화면 추가 측점 0 · 초안 없음 · 옹벽 카드 없음 → [저장] → 서버 추가 측점 0 · 구조물 0 → B06(120 · 140 · 160 m · 127 · 163 카드 없음) → B05 같음 · 검증 대기. + +## 494. B05 · B06 구조물 측점 횡단도에 구조물 형상 안 보임 (요구 292 · 494-1 sub1 · Opus high) + + +- 사용자 확정(요구 292): B05 · B06 에서 구조물 측점을 고르면 나오는 횡단도에 구조물 형상이 보여야 함 — 지금 안 보임. +- 정함(브레인): 원인 먼저(언제부터 · 어느 커밋 · 자료 없음인지 그리기 끊김인지) · 횡단도 구조물 형상 연결 = B05 · B06 자체 기능(M02 구조물 조합과 별개 · 사용자 정정). +- 사용자 확정(요구 295): 이미 빈 채 저장된 관 = 코드로 안 채움 · 그 프로젝트는 노선 추천 [적용](다른 항목)으로 새로 시작해 기본값을 받음. +- [x] 494-1 원인 · 고침(sub1) — B05 임시 횡단 · B06 횡단 둘 다 · 확인: 시험(형상이 그려지는 길) + 검증_sub1 관 · 옹벽 · 횡단수로 측점 고름 → 횡단도 형상 보임(사진) · 밝음 · 어두움. + - 검증완료(sub1) — 원인: B06 화면 밖 카드 다시 그리기가 쉬는 틈(시간 제한 없음)만 기다려 새 구조물 측점 카드가 빈 설계로 남음 · B05 「횡단」 판이 들어올 때 이미 고른 구조물을 안 그림 · 고침: 쉬는 틈 한도 200 ms · 판 만들 때 지금 고름 따라감 · 시험 test_494_1(고치기 전 빨강) · typecheck 0 · ORCA 검증_sub1 옹벽 7+5 · 7+10 · 7+15 설계선 + 옹벽 · 관 17+11 · 맹암거 12+10 밝음 · 어두움 · 되돌림(구조물 0 · rev 0) · 남음: 노출형 횡단수로 = 그림 부품 없음 · B05 원지반 누름 임시 횡단 = 구조물 형상 안 얹음 +- [x] 494-2 새 교차 관 기본값(sub4) — 검증_브레인232 확인(요구 294): 노선 바뀜 길(손 고침 [저장] · 추천 [적용] · 추천 초기 종단)이 새 세류선 교차 관을 옵션 없이 만듦(`B05_Profile_Route_Save_Parts.py:92`) → 관경 빈칸 → 횡단도 관 형상 없음 · 기본값 채우기(`_apply_new_defaults`)는 B04 유역 길에만 · 확인: 시험(새 교차 관 = B04 기본과 같음) + 검증_sub4 B06 관 형상 사진 · 이미 저장된 빈 관은 안 바꿈. + - 검증완료(sub4) — 고침: 세 길이 지나는 `followed_pipes` 에서 새로 더한 관(짝 -1)만 B04 `_apply_new_defaults` · 시험 test_494_2(손 고침 · 추천 [적용] 체인 · 초기 종단 · 옛 코드 빨강 3) · test_283 새 교차 관 기대 = 기본값 · 관련 64 통과 · typecheck 0 · ORCA 검증_sub4 추천 [적용] → p38800 관경 1000 · 집수정 L · 초기값도 · B05 「횡단」 · B06 19+8 관 형상(tmp/494_2_b05_cross.jpg · tmp/494_2_b06_cross.jpg) · 상세 자료 culvert Φ1.0 · 빈칸 경고 0/59 · 되돌림(storage · DB 7 표 · p38800 빈 옵션 그대로) + +## 495. CAD 고침 — 손가락 단추 지움 · 리본 초점 · 축척 칸 · 탭 구분선 · M02 DWG (요구 298-1 · 495-1 sub3 · 495-2 sub1 · Opus high) + + +- 정함(브레인): 근거 `docs/raw/조사/2026-10-20_요구298_A_CAD.md` · 데스크탑 CAD 빌드 = 10-20 끝(전역 싱크가 빼먹음) · B05 평면 상단 고르기 = 네이티브 select · 480 훅 닿음(같은 값 다시 고름 초점 틈만 화면 확인) · 표지 = 원본 개념 없음 → 491-2 그 조각 지움 · M02 [수정] 상세 = 같은 openwebcad(리본 [삽입] 안 [DWG 불러오기]). +- 사용자 확정(요구 300): A1 = M02 [파일 업로드] 지움 · CAD [DWG 불러오기] 한 길. +- [x] 495-1 CAD · B07 — 손가락 단추 지움(`input-touch.ts` · `input-touch.css` · `test_cad_touch` 고쳐 씀) · 리본 `