- `docs/` 를 .gitignore 에서 빼 git 추적 대상으로 전환 (위키·완료 이력·검증 기록) - `docs/raw/PLAN.md` · `docs/raw/OWNERS.md` 를 저장소 최상위로 이동 후 .gitignore 에 등록 — 창끼리 공유하되 저장소에는 안 올리는 장부 - 살아 있는 경로 참조 7개 파일 정정 (아카이브 107건은 그때 사실이라 그대로 둠) - graphify 날짜별 산출물(`docs/wiki/graphify-out/20*/`) 제외 — `graphify update` 가 다시 만듦 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
45 KiB
B05·B06 완료분 (0장 공통 기반 · 3장 B06 횡단설계)
이관 2026-09-08 —
docs/raw/PLAN.md에서 옮김 (원문 그대로). 절 셋은 통째로, 나머지는 완료된 조사·사고 기록만 덜어 옮겼다. 살아있는 미결과 지금도 기준으로 쓰는 표(0-7 확정 규칙 · 3-9 폼 기본값 · 0-5 계산·저장 지도)는 계획서에 남겼다.
0-7. 노선이 바뀌면 세 벌은 어떻게 되나 — 규칙 확정 (2026-09-06 사용자 확정)
데이터 세 벌(①초기값 ②작업본 ③캐시) 규칙은 노선이 그대로일 때만 서 있었음. 노선이 바뀔 때의 규칙이 없어 사용자가 지적(2026-09-06)했고, 같은 날 아래 규칙으로 확정함. 실제 작업은 0-2 에서 하고 이 절은 규칙과 현황만 적음.
당시 현황 조사(「노선을 바꾸는 길 넷」·「지적된 구멍과 답」·「지금 있는 것/없는 것」)는 아카이브로 옮겼음 —
docs/raw/plans/2026-09-07_plan_completed_items_3.md. 그 표들은 0-2·0-10·0-12 가 끝나기 전 상태라 지금과 다름. 아래 「확정 규칙」이 지금 기준임.
확정 규칙 (2026-09-06 사용자 확정)
노선을 두 벌로 둔다. 원본과 수정본이며, 수정본은 원본과 같은 값으로 시작한다.
| 이름 | 무엇 | 누가 만드나 | 바뀌나 |
|---|---|---|---|
| 예상노선(원본) | 파일 업로드 자동 체인이 낸 노선 | 서버(체인) | 안 바뀜 |
| 계획노선(수정본) | 예상노선을 복사해 시작, 사용자가 고쳐 쓰는 노선 | 복사 → 사용자 편집 | 바뀜 |
- 노선 변경 = 계획노선만. 예상노선은 어떤 경로로도 안 고침.
- 전처리 들어가기 전에 두 벌을 확보한다 — 자동 체인이 예상노선을 내면 그 자리에서 계획노선으로 한 벌 복사. 그 뒤 모든 계산은 계획노선 기준이며, 나머지 흐름은 지금과 같다.
- 화면에는 둘 다 보인다 — 계획노선을 고치는 동안 예상노선이 같이 보여야 어디를 얼마나 옮겼는지 읽힘(0-2 모달).
- [초기화] = 예상노선을 계획노선으로 다시 복사. 재계산이 아니라 복사다.
②작업본 전체의 초기화(
initial_snapshot복원)와 같은 문법 — 원본을 수정본 자리에 덮는다. - 노선이 바뀌면 배수유역부터 전처리를 다시 돈다. 노선 형상이 달라지면 유역·관·횡단이 전부 그 위에 서 있기 때문.
- 둘로 갈라 다룬다 (2026-09-06 사용자 확정).
- 횡단배수 지점(관 지점 정본
pipe_points.json— 배수관·세월교·물넘이·BOX) — 노선 자리에 따라 생기고 없어지는 것이라 옛 값을 물려받지 않고 새로 계산한 값을 씀. 지금 있는 좌표 투영 이월(load_pipe_points_file→project_pipe_points)은 쓰지 않음. - 그 밖의 구조물(
structures.json— 기슭막이·옹벽 등) — 옛 측점값(누가거리)을 그대로 이어받음. 그래야 사용자가 고쳐 둔 값이 살아남음. 자동 재배치·삭제 없음.
- 횡단배수 지점(관 지점 정본
- 계산은 모달 [확인]을 눌렀을 때만 시작한다. 얽힌 계산이 많아 편집 중에 돌면 안 됨. 모달을 닫기 전까지는 아무 계산도 나가지 않음.
- 화면 표기 — 예상노선은 점선, 계획노선은 실선.
- 재계산은 초기 파일 업로드 체인의 로직을 재사용한다 (2026-09-06 사용자 제안, 코드 확인함).
이미 「재확정 체인」(
run_redesign_chain)이 그 뼈대임 — 배수유역 다시 분석(refresh=True) → 기본 관 저장 → 관 정착 계획선 재산출 → 종횡단 재생성 → 옛 측점 설계를 누가거리로 이월 → B05·B06 확정까지 이미 한 줄로 돎. 노선 편집이 쓰려면 한 곳만 손보면 됨: 지금은 노선을 자동탐색으로 다시 푸는데, 사용자가 고친 계획노선을 그대로 받아 쓰는 입구를 하나 내면 나머지 단계는 그대로 재사용됨.
- 투영 이월 코드가 아직 살아 있음 (2026-09-07 위 대조에서 드러남, 작은 건) —
common_util_drainage_pipes.py:163·223project_pipe_points. 0-2 경로에서는 파일을 먼저 지워 안 탐. 그러나load_pipe_points_file이B05_Profile_Engine_Sections.py:137에서도 불리므로 다른 경로(지표면 바꿔 재확정 등)에서는 여전히 탐. 규칙 6 이 「투영 이월은 쓰지 않음」이라 했으니 그 경로도 정리 대상인지 정할 것. 고치면 호출 한 곳에서 vertices 를 안 넘겨 버리는 쪽으로 감.- ⛔ 조사 결과(2026-09-07 보조 창) — 빼면 관이 사라짐. 배분 창·사용자 판단 대기.
-
ⓐ 언제 도나 — 드문 경로가 아니라 B05 종횡단을 만들 때마다 늘 탐 (
build_sections→_load_pipe_points). 자동설계 체인도 여기를 지남. -
ⓑ 관 자리를 옛 노선으로 옮겨 붙이나 — 아님. 저장분 3개로 실측: 8879c53b 관 48건 · 5601e828 11건 · b269ea34 10건, 이동량 최대 0.01m (0.05m 넘는 관 0건). 「이월」이 아니라 같은 선을 두 정점열로 다시 매기는 것임.
-
왜 지문이 늘 어긋나나 — 두 쪽이 서로 다른 파일을 읽기 때문. 저장된 지문이
planned_route.csv지문과 글자까지 같음(5601e828169-bea8d2a6e9fcd08e, b269ea34115-1b8c4294d9e2c9b8). B05 는route_main.geojson을 읽어 다른 지문이 남 (169-59cc…·115-51e9…). 정점 수는 같고 DBroute_points와 파일 좌표는 0.000000m 차이라 같은 노선이 맞음. 즉 「지문 일치」 가지는 사실상 죽은 길이고 투영이 정상 경로임. -
ⓒ 빼면 무엇이 서나 — 아무것도 안 섬. vertices 를 안 넘기면 지문 불일치 →
load_pipe_points_file이None→_load_pipe_points가[]→ 관 0건 · 구조물 측점 0건. 2026-08-30 사용자가 지적한 그 결함으로 되돌아감. 기능 제거이므로 손대지 않았음. -
규칙 6 위반이 아님 — 규칙 6 은 노선이 바뀔 때 이야기인데 이 경로는 노선이 안 바뀌었고 한 노선을 두 파일에서 읽는 것임.
project_pipe_points라는 이름과 「이월」이라는 말이 위반처럼 보이게 했을 뿐임. -
정리하려면 방향이 다름 — 「호출부에서 vertices 빼기」는 아님. 조사 스크립트는
tmp/tests/probe_pipe_projection.py·probe_route_vertex_delta.py·probe_route_signature_source.py·probe_signature_method_vs_geometry.py로 남겨 둠. -
✅ 왜 지문이 다른가 — 답 나옴. 기하가 아니라 「소수 자릿수」임(2026-09-07, 배분 창 지적으로 한 걸음 더 감). 앞서 잰 「0.000000m」는 DB vs geojson 이었고, 지문을 실제로 만드는 두 입력은
planned_route.csv(B04) vsroute_main.geojson(B05) 이었음. 그 둘을 직접 대니 — ·planned_route.csv는 소수 4자리(208403.2001, 367920.7514),route_main.geojson은 소수 3자리(208403.2, 367920.751) — geojson 이 mm 로 반올림한 사본임. · 좌표 차 최대 0.0005m(0.5mm) · 평균 0.0003m — 같은 노선이 맞음. · 그런데 지문은f"{x:.2f}"로 0.01m 자리에서 끊음. 그 0.5mm 가.xx5경계를 넘는 정점에서 글자가 바뀜 — 169개 중 16개가 그럼(보기:367838.8947→.89vs367838.8950→.90). 그래서 같은 노선인데 해시가 늘 달랐음. · 지문 함수는 한 벌(route_signature)이고 같은 좌표를 넣으면 같은 지문이 나옴 — 방법이 갈린 게 아니라 입력 정밀도가 갈린 것임(배분 창 가설이 맞았음, 다만 「직렬화 방법」이 아니라 「저장 자릿수」). -
→ 고칠 자리는 「정본 파일 선택」이 아님. 셋 중 하나면 됨 — ① geojson 을 CSV 와 같은 자릿수로 쓰기 ② 지문 입력을 한 쪽으로 맞추기 ③ 지문 비교를 해시 일치 대신 기하 허용오차 (정점 수 같고 최대 좌표차 1mm 미만)로 바꾸기. ③ 이 경계 문제를 아예 없앰. ⚠ 어느 쪽이든 지문이 실제로 맞은 뒤에 투영 가지를 지울 것 — 순서가 뒤집히면 관이 사라짐.
-
✅ ③ 구현 끝냄(2026-09-07, 커밋
e2d329d3).-
명세를 한 군데 바꿨음 — 「정점 수 같고 좌표차 1mm 미만」은 못 씀. 저장 파일에는 옛 노선 좌표가 없고 지문 문자열 하나뿐이라 정점을 댈 대상이 없음. 대신 파일이 실제로 들고 있는 것(관의 x·y)으로 같은 판정을 함 — 저장된 관을 지금 노선에 투영해 재 보기만 하고(
max_projection_shift, 값은 안 고침) 최대 어긋남이 한계 안이면 같은 노선으로 봄. 이러면 이미 저장된 파일에도 그대로 듣는다는 이점이 있음(다시 저장할 필요 없음). -
허용오차 0.05m — 1mm 는 못 씀. 0.5mm 좌표 차가 누가거리에서는 누적돼 최대 5.3mm 로 나타나기 때문(아래 실측). 0.05m 는 그 열 배 여유이고, 사람이 노드를 끌면 관은 m 단위로 밀리므로 그것을 「같다」로 볼 위험은 없음.
-
투영 가지는 안 지웠음. 대신 그 가지가 실제로 돌면 WARNING 을 찍게 함 (
배수유역: 투영 이월 실행 —). 한동안 0 인 것을 본 뒤에 지울 것. -
시험 3건(
tmp/tests/test_pipe_route_tolerance.py) — mm 반올림 사본은 같은 노선으로 판정되고 누가거리가 한 값도 안 움직임 / 중간을 3m 민 노선은 안 걸림(그물 확인) / 허용오차 값 범위. 기존test_pipe_point_projection.py2건도 그대로 통과 (±0.7m 잔물결 노선은 여전히 투영으로 감). 전체 514 passed · 18 skipped. -
저장된 실제 3개 프로젝트 전후 대조(
tmp/tests/probe_tolerance_before_after.py) — 셋 다 판정이 「다름 → 투영 이월」에서 「같음 → 저장분 그대로」로 바뀜.프로젝트 관 최대 어긋남 화면 값 변화(투영본 → 저장본) 8879c53b 48건 0.0053m 최대 0.0053m · 평균 0.0023m 5601e828 11건 0.0009m 최대 0.0009m · 평균 0.0004m b269ea34 10건 0.0005m 최대 0.0005m · 평균 0.0002m 즉 ③ 뒤로 화면 값이 바뀌는 폭은 최대 5.3mm — 도면·수량에 보이지 않는 크기임.
-
-
판단(2026-09-07 배분 창) — 지금 고치지 않음. 다만 답 안 난 질문 하나부터 풀 것. · 정점 수가 같고 좌표가 0.000000m 차이인데 왜 지문이 다른가? 기하가 같으면 지문도 같아야 함. 그런데도 다르다면 원인은 기하가 아니라 지문을 만드는 방법(자릿수·직렬화 순서·포함 항목)일 수 있음. 그렇다면 고침은 「정본 파일 갈아치우기」가 아니라 양쪽이 같은 방식으로 지문을 내게 하는 것 — 훨씬 작고 위험도 낮음. · 그 답이 「방법 차이」면 그쪽으로 감. 「진짜 다른 기하」면 그때 어느 파일을 정본으로 삼을지를 정해야 하고, 그건 사용자 판단으로 올림. · ⚠ 어느 쪽이든 투영 가지를 먼저 지우지 말 것. 지문이 실제로 맞게 된 뒤에 지워야 관이 사라지지 않음. 순서가 뒤집히면 2026-08-30 결함으로 되돌아감.
-
답 나옴 — 기하가 아니라 「저장 자릿수」임 (2026-09-07 보조 창). · 앞서 낸 「0.000000m」는 DB vs geojson 을 잰 값이었고, 지문을 실제로 만드는 두 입력 (
planned_route.csv(B04) vsroute_main.geojson(B05))은 안 대 봤던 것이었음. ·planned_route.csv= 소수 4자리(208403.2001, 367920.7514) ·route_main.geojson= 소수 3자리(208403.2, 367920.751, mm 반올림 사본). 좌표 차 최대 0.0005m · 평균 0.0003m — 같은 노선이 맞음. · 그런데 지문은f"{x:.2f}"로 0.01m 자리에서 끊음. 그 0.5mm 가.xx5경계를 넘는 정점에서 글자가 바뀜 — 169개 중 16개. 보기:367838.8947→.89vs367838.8950→.90. · 지문 함수는 한 벌(route_signature)이고 같은 좌표를 넣으면 같은 지문이 나옴 (시험 통과). 갈린 것은 방법이 아니라 입력 정밀도임. · ⇒ 정본 파일 선택 문제가 아님. -
결정(2026-09-07 배분 창) — ③ 허용오차 비교로 감. · 후보 셋 — ① geojson 을 CSV 와 같은 자릿수로 쓰기 ② 지문 입력을 한 쪽으로 맞추기 ③ 지문 비교를 해시 일치 대신 기하 허용오차(정점 수 같고 최대 좌표차 1mm 미만)로. · ③ 인 이유 — ①② 는 이미 저장된 파일이 여전히 어긋난 채라 투영 가지를 계속 태워야 함. ③ 은 경계 문제를 원천에서 없애고 저장 자릿수가 앞으로 또 바뀌어도 안 흔들림. · [x] ③ 구현 완료(2026-09-07 커밋
e2d329d3). 다만 명세 두 곳이 바뀌었고 근거가 있음.- 「정점 수 같고 좌표차」로는 못 잼 — 저장 파일에 옛 노선 좌표가 없음(들어 있는 건 지문 문자열 하나뿐). 그래서 파일이 실제로 들고 있는 것(관의 x·y)으로 같은 판정을 함 — 저장된 관을 지금 노선에 투영해 재 보기만 하고(값은 안 고침) 최대 어긋남이 한계 안이면 같은 노선으로 봄. 덤으로 이미 저장된 파일에도 그대로 들음(다시 저장할 필요 없음).
- 허용오차는 1mm 가 아니라 0.05m — 1mm 면 지금 프로젝트가 전부 탈락함. 좌표 차는
0.5mm 지만 누가거리에서는 선을 따라 누적돼 최대 5.3mm 로 나타남. 0.05m 는 그 열 배
여유이고, 사람이 노드를 끌면 관은 m 단위로 밀리므로 「같다」로 볼 위험이 없음.
· [x] 시험 — mm 반올림 사본이 같은 노선으로 판정되고 누가거리가 한 값도 안 움직임 ·
중간을 3m 민 노선은 안 걸림(투영으로 감) · 허용오차 값 범위. 기존
test_pipe_point_projection.py2건도 통과(±0.7m 잔물결 노선은 여전히 투영). 전체 514 passed · 18 skipped. · [x] 저장된 실제 3개 전후 대조 — 셋 다 「다름 → 같음」으로 뒤집힘.
프로젝트 관 최대 어긋남 화면 값 변화(투영본 → 저장본) 8879c53b 48건 0.0053m 최대 0.0053m · 평균 0.0023m 5601e828 11건 0.0009m 최대 0.0009m · 평균 0.0004m b269ea34 10건 0.0005m 최대 0.0005m · 평균 0.0002m ⇒ ③ 뒤로 화면 값이 바뀌는 폭은 최대 5.3mm — 도면·수량에 안 보이는 크기임. (앞서 「최대 0.01m」라 한 것은 정렬 목록끼리 뺀 값이라 조금 컸음.) · [x] 투영 가지는 안 지웠고 로그만 달았음 — 실제로 돌면 WARNING (
배수유역: 투영 이월 실행 — 노선이 바뀌어 관 지점 N건을 좌표로 옮깁니다 (최대 어긋남 X)), 허용오차로 통과하면 INFO(지문은 다르나 같은 노선입니다 — 관 N건 그대로 씁니다). · [ ] 한동안 WARNING 이 0 인지 본 뒤 투영 가지를 지울 것. 지금 지우지 말 것 — 순서가 뒤집히면 2026-08-30 결함(관 0건)으로 되돌아감. · 1차 집계(2026-09-07) — 아직 지우지 않음. 근거는 모였으나 「한동안」이 안 됨.- 로그 — 서버 로그 전부(
tmp/server*.log)에서 투영 WARNING 0건. 옛 형식 (좌표로 이월합니다, INFO) 1건이 남아 있는데 그건e2d329d3이전 것임. - 저장 자료 6개 실측(
tmp/tests/probe_pipe_branch_today.py, 읽기만) — 5개가 허용오차 안(같은 노선): 최대 어긋남 0.0004 · 0.0009 · 0.0017 · 0.0053 · 0.0005m, 전부 0.05m 아래. 투영 가지로 가는 프로젝트 0개. - 나머지 1개(
325f57d9)는 자료가 깨져 있어 판정 자체가 안 됨 —route_main.geojson의 정점 135개가 전부 같은 점(선 길이 0)이고 관 좌표는 30km 떨어진 곳임. 옛 시험 프로젝트로 보임. 이 경우는 투영 가지도 안 타고 관이None이 됨. - ⇒ 지우는 이득이 작고 위험이 큼. 지워서 얻는 것은 코드 몇 줄이고, 잃는 것은 「노선이 진짜 바뀐 경우」의 안전망임(대체 경로인 관 재배치가 아직 없음). 꺼낼 조건을 분명히 함 — ① 노선 재확정을 몇 번 더 돌린 뒤에도 WARNING 0 이고 ② 노선이 실제로 바뀌었을 때 관을 다시 놓는 경로가 서 있을 것. 둘 다일 때만 지움.
-
- ⛔ 조사 결과(2026-09-07 보조 창) — 빼면 관이 사라짐. 배분 창·사용자 판단 대기.
이 절의 완료분은 아카이브로 옮겼음 —
2026-09-07_plan_completed_items_2.md·…_3.md(docs/raw/plans/).
0-8. 속도 개선 — 한 묶음 기록 (2026-09-06 완료, 두 창 공동)
본문(목표·결과·고친 것 ⓐ~ⓕ·안 하기로 한 것·재발 방지)은 아카이브로 옮겼음 —
docs/raw/plans/2026-09-07_plan_completed_items_3.md. 여기에는 남은 것만 둠.
남은 것
- 호출량 — 막지 말고 「왜 이렇게 잦은지」부터 볼 것 (2026-09-07 사용자 지시
「일단은 막지말고 이건 어떤 부분에 영향을 미치는지 왜 이렇게 자주 요청하는지 확인해줘」).
지금은 넘어도 막지 않고 기록만 함(
API_CALL_HOURLY_LIMIT기본 20000/시간).-
답 — 지금은 잦지 않음. 상한에 닿은 적도 없음 (2026-09-07 조사, 막는 것은 안 함).
-
상한이 하는 일 = 기록뿐 —
main.py:397~403미들웨어가/api/로 시작하는 요청만 세고,note_api_call(common_util_audit.py:105~125)이 세션별·시간대별 메모리 카운터를 올림. 20,000 을 넘으면 그 시간대에 딱 한 번 감사기록RATE_ANOMALY한 줄 + 경고 로그 한 줄. 막지도 늦추지도 거절하지도 않음. 넘어도 사용자에게 변화 없음. 요청당 비용도 없음(메모리). -
실측 (공용 브라우저, 용화 5601e828 · B06) —
무엇 /api/호출페이지 한 번 여는 데 11건 ( sections/{n}2 ·…/detail2 ·auth/session1 ·workflow-state1 ·dashboard/me1 ·sections/company-standards1 ·projects/structure-types1 ·route/structures1 ·drainage/pipe-points1)화면 이동 B06 → B05 1건 ( auth/session)화면 이동 B05 → B06 1건 가만히 둘 때 60초 0건 -
되풀이·폴링 없음 — 유휴에서 한 건도 안 나감. 0-1 에 「이동 한 번에 B05→B06 12건 · B06→B05 20건」으로 적힌 것이 지금 1건임(캐시·중복 제거가 실제로 서 있고 다시 늘어난 자리 없음). 20,000/시간에 닿으려면 초당 5.5건을 한 시간 내내 내야 함 — 이 프로필로는 불가능. 옳은 표(
system_audit_logs)에서RATE_ANOMALY0건. -
곁가지 — 지도 타일이 왜 안 세이나: 경로가
/api/밖이라서(2026-09-07 확인). 감시는main.py:399의path.startswith("/api/")한 줄이고, 타일은@tiles_router.get("/tiles/{project_id}/{layer}/{z}/{x}/{y}.pbf")(B04_PreProcess_Router_GIS.py:187, prefix 없음)이라 그 그물에 안 걸림.- 켤 수는 있음 — 한 줄(
startswith(("/api/", "/tiles/"))). 다만 지도를 끌면 타일이 수십 건씩 나가므로 상한 경고가 늘 울릴 것임. 상한을 타일용으로 따로 잡지 않으면 경고가 소음이 되어 오히려 감시가 무뎌짐. - ⇒ 지금은 안 켬(권고). 켤 조건 = 타일 남용을 실제로 걱정할 때 + 타일용 상한을 따로 정할 때.
- 켤 수는 있음 — 한 줄(
-
곁가지 — 빈 표
audit_logs지움(2026-09-07 사용자 지시).db_management/019_drop_legacy_audit_logs.sql— 공용 DB 에 적용 완료.- 지우기 전 확인 —
audit_logs0행 · 정본system_audit_logs81행 · 이 표를 참조하는 외래키 0건 · 코드는 쓰기(common_util_audit.py:61)·읽기 (B01_Dashboard_Repository.py:455·460)·정리(purge_expired_audit_logs) 전부 정본만 씀. - 최초 스키마(
001_create_schema.sql)는 안 고침 — 지나간 이력은 다시 쓰지 않음. - 공용 DB 라 적용 전 두 창에 알리고 25 의 「막을 것 없음」을 받은 뒤 돌림. 서버 재시작 없음.
- 지우기 전 확인 —
-
이 절의 완료분은 아카이브로 옮겼음 —
2026-09-07_plan_completed_items_2.md·…_3.md(docs/raw/plans/).
3-6. B06 구조물 추가 — 남은 확인 (2026-09-05 조사)
이미 가능하다. B06 좌측 「구조물 배치」는 B05와 같은 폼·목록 부품을 쓴다(B06_Section_UI_Page_Structures_Panel.ts → 공용 A00_Common/b_structures_section). B~G군 구조물의 추가·수정·삭제가 세션에 쌓였다가 [저장]·[확정]에서 정본에 들어간다. 다만 계곡 통과 시설(A군 — 배수관·세월교·BOX암거)은 표시·선택만 되고 "추가·삭제는 B05에서 하세요" 안내만 뜬다. 배수유역을 다시 나눠야 하기 때문이다.
- 구조물 전체를 B06 에서 넣게 함 (2026-09-07 사용자 확정 「a군 구조물 뿐만아니라
구조물 전체를 넣을 수 있어야 함」, 보조 창 커밋
a811286e) — 전제가 달랐음: B06 이 A군만 받은 게 아니라, B군(종단배수 6종)·F군(생태 2종)이 레지스트리에서enabled:false였고 그래서 B05 도 똑같이 여섯 군만 보였음.fetchStructureTypes(includeDisabled)갈래를 둬 B06 만 전체를 부름(B05 는 종전대로). 실화면 — B06 목록 8군(A·B·C·D·E·F·G·기타), B05 6군 그대로.- ⚠ 답: 안 흐름 (2026-09-07 보조 창 ⑧ 코드 추적) — 넣고 저장은 되나 도면·면적·
수량 어디에도 안 잡힘. 끊기는 자리 셋:
- ① 측점을 안 심음 —
B05_Profile_Structures_Schema.py:85가 A군 전부 + D군 구간형만 심음. B·F군 제외 → 그 자리에 횡단도 자체가 안 생김. - ② 횡단 제원(벽)으로 안 얹힘 — 짝 두 곳이 C군 구간형만 봄
(
B06_Section_Section_Store.ts:58·B06_Section_Engine_Structures_Wall.py:49). 도면·설계선 트림·폐회로 면적·유토곡선·3D 가 전부 이 경로라 B·F군은 그림에도 물량에도 없음. - ③ 수량 별도 경로 없음 —
B08_Quantity_Router.py는 구조물 정본을 안 읽음.structures.json을 읽는 파이썬은 두 곳뿐(B05_Profile_Engine_Sections.py:193, 목록 API).
- ① 측점을 안 심음 —
- 사용자 결정 (2026-09-07): B군(측구·맹암거) 먼저.
- 🔴 B군(종단배수 6종)을 수량에 태우기 — 닫힘 (2026-09-08 두 창 대조).
측구는 횡단 설계가
ditch_area_m2까지 파이썬·TS 짝으로 셈하므로 구조물로 또 세면 이중 계상임. 레지스트리design_owner: 횡단 설계가 붙은 것은ditch_side하나이고, B08 원단위 전개가 그것을 건너뛰는 것 확인(B08_Quantity_Router_Material.py:61, 건너뛴 사유를 응답에 적음). 연장 산출(common_util_structure_lengths.py)도 같은 규칙. 나머지 다섯(산마루측구·소단측구·도수로·절토사면 배수로·맹암거)은 연장(m) 으로만 나가고 랩탑 창이 실화면에서 산마루측구 1개소 40.0m 확인함. 그 줄들이 인계에 오면 B08 이 그대로 실음. - 옛 조사 기록 — 착수 전 설계 조사(2026-09-07 보조 창).
보고서 https://claude.ai/code/artifact/48396d2f-3478-40af-856a-932e81bae306
- ⚠ 「도랑이라 새 단면 기하가 필요하다」는 전제가 대부분 틀렸음.
- ① 측구(옆도랑)는 이미 다 되어 있음 — 횡단 설계에 내장돼 있고(카드의 측구 켬/끔 ·
일반형/L형),
ditch_area_m2(측구 터파기 단면적)를 파이썬·TS 짝으로 이미 셈함 (B06_Section_Engine_Design.py:627·common_util_cross_design.ts:349). 구조물로 또 넣으면 이중 계상임. - ② 나머지 다섯은 횡단도에 그릴 법정 의무가 없음 — 별표2 「횡단면도 각 측점 기입 물량」은 지반고·계획고·절토고·성토고·단면적·지장목 제거·측구터파기 단면적·사면보호공뿐. 산마루측구·도수로·맹암거는 없음. 자리도 횡단도 밖임 — 산마루측구는 사면 정상 바깥, 도수로·산비탈수로는 사면을 따라 내려가는 시설, 맹암거는 땅속.
- ③ 진짜 비어 있는 길은 수량 하나뿐이고 그게 제일 쉬움 — 수량 단위가 전부 m(연장) (맹암거 12-10 · L형 측구 12-9-1 · 산마루측구 12-9-2 · 소단측구 12-9-3). 단면 기하 불필요. ⇒ 「③ 이 가장 어렵다」가 아니라 **「③ 만 필요하다」**임.
- 끊긴 자리 셋 재평가 — ① 측점 심기 필요 없음(현행 유지가 맞음) ② 횡단 제원은 도면에 그리기로 정할 때만 ③ 수량 이것만.
- 지식DB — 치수 기준 없음. 측구만 법정(너비 0.5~1m · 깊이 30㎝ 내외). 나머지는 교본 8장 4절까지 봐도 배치·재료·단면형(반달꼴·U·사다리꼴)만 있고 폭·깊이 수치가 없음. 소단측구는 항목 자체가 없음. 크기 산정법(Manning + 통수단면 2.0배)은 있으나 표준 규격 미정 ⇒ 그리기로 하면 사용자 확정 필요, 안 그리면 이 문제가 사라짐.
- 곁가지 — 소단측구는 놓을 자리가 없음. 우리 「2단 비탈」은 소단(berm)이 아니라
2단계 절토 경사(암 경계 위아래 경사 차)임. 소단 기하가 코드에 없음(
소단·berm0건). 소단을 만드는 것은 절토 비탈면 설계를 건드리는 별개 작업임. - 권고 범위 — 1단계 「구조물 정본 → 시설별 연장(m)」 함수 하나(반나절) · 2단계 종단·평면에 B군 구간을 띠로 표시(반나절). B08 연결은 재작업 때. 횡단도 그리기는 보류. (③ 을 뒤로 두는 이유가 「버려질까 봐」가 아니라 **「양식에 안 묶이는 조각만 먼저 떼면 되기 때문」**으로 바뀌었음.)
- 사용자 결정 셋 (2026-09-07)
- ㉮ 측구(옆도랑) — 목록에 두되 「횡단에서 관리」 표시만. 수량은 안 잡히게 함 (사용자: 「두되 표시만해줘. 다음에 내가 구조물 메뉴 정리할 때 정리할게」).
- ㉯ 나머지 다섯 — 수량만. 횡단도 그리기는 나중에 검토(사용자: 「일단 수량만」). ⇒ 치수 확정 문제가 이번에는 안 걸림.
- ㉰ 소단측구 — 소단(berm)부터 만들기(사용자). 아래 3-9 로 절을 냄.
- ㉮ 구조물 목록의 측구에 「횡단에서 관리」 표시를 붙이고 수량 계통에서 제외
(이중 계상 방지). 끝냄 (2026-09-07, 커밋
7769db36)- 레지스트리에
design_owner를 새로 두고 측구에 「횡단 설계」를 적음.managed_by는 저장까지 막아 못 씀 — 사용자는 「두되」라 했으므로 배치는 계속 가능해야 함. - 표시 자리는 구조물 배치 폼(목록 항목은 「[측점][이름]만」이 2026-08-18 사용자 지시). 문구 — 「횡단 설계에서 관리 — 여기서 넣어도 제원·수량은 그쪽 값을 씁니다.」
- 실화면 확인 — B06 좌측 폼에서 구조물군 B → 종류 측구(옆도랑) 를 고르면
안내가 254×44px 로 뜸. API 도
design_owner: "횡단 설계"를 내려 줌. 리셋으로 폼 되돌림. - ⚠
@lru_cache함정에 한 번 걸렸음 — 레지스트리는 프로세스 수명 동안 1회 로드라 JSON 을 고쳐도 서버를 다시 안 띄우면 옛 값이 나감./api/health의stale: true(b8 의 7-2 표시)가 그것을 바로 잡아 줬음 — 첫 실전 사용 사례임.
- 레지스트리에
- ② B군 수량 1단계 — 「구조물 정본 → 시설별 연장(m)」 함수 하나. 단위가 전부 m 이라
단면 기하 불필요. 소단측구는 빈 칸으로 둠(3-9 뒤에 채움).
끝냄 (2026-09-07, 같은 커밋) —
common_util/common_util_structure_lengths.py- 빼는 것 셋 — 관 정본 소관(
managed_by) · 횡단 소관(design_owner) · 소단측구(PENDING_TYPE_IDS). - 겹친 구간은 합쳐서 셈함 — 같은 시설을 겹치게 두 번 넣으면 단순 합이 그 구간을 두 번
셈. 원래 합(
raw_length_m)도 함께 내보내 겹침이 숨지 않게 함. - 수량서 양식에 안 묶임 — 종류별 연장·개소만 내므로 B08 을 실무 xlsx 로 다시 짜도 그대로 씀.
- 자체검증 — 새 시험 7건(종류별 합산 / 겹침 제거 80m vs 단순 합 110m / 측구 제외 / 소단측구 제외 / 배관 제외 / 구간 없는 항목은 스키마가 막음 / 빈 프로젝트). 전체 521 passed · 18 skipped.
- 빼는 것 셋 — 관 정본 소관(
- ✏️ 앞 보고 정정 하나 — 「B군은 옵션 항목이 하나도 없다」가 틀렸음(레지스트리 키 이름을
잘못 읽었음). 실제로는 있음 — 측구
형식·깊이 30cm, 산마루측구·절토사면 배수로재료, 도수로재료·단면형, 맹암거규격(자유 입력). 소단측구만 비어 있음. 수량 단가에 필요한 재료·형식은 이미 담기고, 없는 것은 폭·깊이 치수뿐이라 ㉯(수량만) 결론은 그대로 서고 오히려 더 단단해짐. - ③ 종단에 B군 구간을 띠로 표시 — 끝(2026-09-07 커밋
76fa78c5). 부품은 새로 안 만들었음 —buildStructureLane이 이미 모든 군을 받고 있었고(군 필터 없음), 빠져 있던 것은 「구간 띠를 고른 동안만 폈다」는 조건 하나뿐이었음. 그 조건만 걷음. · 구간형이면 늘 띠(고른 것 4px·0.55, 나머지 3px·0.45). 레인 높이 42px 그대로 (2-5b 에서 줄인 것 안 부풀림). · 실측 — 띠 0 → 7개(이 프로젝트 구간형 7건) · 띠 두께 3px · 레인 42px · 알약 18개(그대로). · ⚠ 확대 크롭은 못 잡았음(레인이 가로 5,799px 스크롤 안이라 좌표를 못 맞춤). 수치로는 확인됨. - 파다가 나온 것 — B05 가 레지스트리를 「켜진 것만」 받고 있었음(같은 커밋).
B군은 레지스트리에서 꺼져 있어(
a811286e는 B06 만 전체를 부르게 했음), B06 에서 넣은 B군이 종단에 이름·색 없이 「?」 회색 알약으로 떴을 자리였음. · 고침 — 레지스트리를 쓰는 자리에 따라 나눔: 추가 메뉴는 켜진 것만(B05 는 종전대로 여섯 군), 알약 레인·군 판정은 전부. 요청 수는 그대로 1건. · 확인 — 타입 응답 36종에 B군 6종 포함. B군 6종은 전부interval이라 확인된 C군 7건과 같은 경로를 탐. · ✅ 실제로 넣어 봄 — 끝냄(2026-09-07 사용자 지시, 실화면 · 용화 5601e828). 좌측 [구조물 배치] 에서 B 종단배수 → 산마루측구, 시작 2+0 · 종료 4+0 으로 [추가] → 종단 띠 7 → 8개 → [저장] → 수량 함수가ditch_ridge · B군 · 1개소 · 40.0m한 줄을 냄(common_util_structure_lengths). 지우고 저장하니 띠 7개·수량에서 사라짐. ⇒ 넣는 것부터 수량까지 실제로 도는 것이 확인됨. · ⚠ 곁가지로 드러난 위험 — [삭제] 에 확인 절차가 없음. 목록에서 무엇이 골라져 있는지 헷갈린 상태로 누르면 다른 구조물이 조용히 지워짐(2026-09-07 실제로 겪음 — 돌쌓기(찰) 한 건이 지워져 같은 자리·같은 값으로 되살림). 사람이 쓸 때도 같은 사고가 남. 확인 창을 넣을지 사용자 판단 대기. - 평면(지도)에 구간형 구조물 띠 — 넣음(2026-09-07 사용자 지시, 커밋
f659aec8).- ⚠ 「부품이 없어 새로 짜야 함」은 사실이 아니었음 — 계획선 표본(
strengthSamples)이 1m 간격이라 배열 인덱스가 곧 누가거리임(resampleRoute). 구간 → 화면 선은 그 토막을 잘라 굵게 긋기만 하면 됨. 새 파일 하나(88줄)로 끝남(B05_Profile_UI_Drainage_Spans.ts). - 그리는 자리 — 계획선 바로 위, 강도 색칠·마커 아래(굵기 7px·투명도 0.45). 색은 레지스트리 표시색 그대로. 이름은 안 적음(종단에 있고, 지도 글자는 눈금·유역 번호와 겹침).
- 자료는 종단 레인과 같은 것(구조물 정본 + 타입 레지스트리) —
routeSpansFromStructures. 구조물을 넣거나 빼면 띠도 따라옴(setStructures·setStructureTypes). - 시험 5건 — 부품 존재 · 범위 밖 구간 안전(저장분이 노선보다 길어도 잘라 그림) · 쌓는 순서(계획선 → 띠 → 강도 색칠) · 같은 자료에서 뽑는지 · 목록 변화 추종.
- 실화면 확인(2026-09-08 00:47, 용화 5601e828 · B05 배수유역도) — 색으로는
계획선과 못 가름(계획선이
#f97316주황이라 띠 색과 같은 계열임). 그래서 두께로 판정했음: 캔버스 세로 방향 따뜻한색 연속길이 분포 1~3px 216줄(계획선 2.4px) vs 5~8px 70줄 · 9px+ 32줄 — 7px 띠 무리가 뚜렷함. 관 마커는 11개뿐이라 이 수를 못 만듦. ⚠ 한계 — 띠를 끈 대조군을 못 만들어(끄는 스위치가 없음) 분포로만 판정했음.
- ⚠ 「부품이 없어 새로 짜야 함」은 사실이 아니었음 — 계획선 표본(
- B08 연결은 B08 재작업 때. 지금 프로토 위에 얹지 말 것.
- F군(녹화·이동통로)은 뒤로 — 단면 기하가 없어 면적이 아니라 수량 항목으로 세는 것이 맞아 보임. B군이 선 뒤에 판단.
- ⚠ 답: 안 흐름 (2026-09-07 보조 창 ⑧ 코드 추적) — 넣고 저장은 되나 도면·면적·
수량 어디에도 안 잡힘. 끊기는 자리 셋:
이 절의 완료분은 아카이브로 옮겼음 —
2026-09-07_plan_completed_items_2.md·…_3.md(docs/raw/plans/).
3-9. 소단(berm) 신설 — 절토 비탈면에 평평한 턱 넣기 (2026-09-07 사용자 지시)
🔴 사고 기록 — 소단을 놓으면 화면이 멈추던 것 (2026-09-07, 고침 80db17d4)
증상 — 공용 브라우저에서 구조물로 소단을 한 건 놓자 그 순간부터 25분 넘게 계산이 안 끝남. 렌더러가 1.4코어를 계속 태움. 같은 측점을 서버(파이썬)로 돌리면 0.01초에 끝나 서버는 멀쩡해 보였음 — 그래서 「화면만 느리다」로 오진하기 쉬운 자리였음.
원인 — cut_profile_points 의 무릎(암 경계 교차) 가지에서 제자리 뒤집기.
암 경계선의 기울기가 암 경사와 토사 경사 사이에 있으면
· 토사로 바꾸면 다음 걸음이 경계 아래 → 「다시 암」
· 암으로 바꾸면 다음 걸음이 경계 위 → 「다시 토사」
가 되고, 이때 share = -diff_now/span 이 0 이라 knee_dist == dist — 거리가 한 걸음도
안 나감. while dist < limit 이 영원히 안 끝남. multi_knee 가 참일 때만 나는데,
소단이 있으면 항상 참이라 소단이 곧 지뢰였음.
고침 — ① 무릎은 앞으로 나아갈 때만 인정(직전 무릎 자리를 기억, 같은 자리면 안 뒤집고 한 걸음 진행) ② 걸음 상한 40,000(정상 최대 4,000의 10배) + 넘으면 경고 로그 (조용히 자르지 않음) ③ 파이썬·TS 같은 규칙·같은 상수.
왜 종전 값이 안 바뀌나 — 단일 무릎 경로는 첫 뒤집기 뒤 (multi_knee or not in_soil) 가
거짓이 되어 가지 자체가 닫히므로 새 규칙에 닿지 않음. 소단 없는 272개 측점이 값 동일.
시험 — 배분 창의 tmp/tests/test_berm_knee_progress.py 5건(8초 타임아웃 재현·꼭짓점이
뒤로 안 감·소단 없는 경로 불변·짝 규칙 대조·TS 를 node 로 실제 실행). 이쪽 거울 시험
test_cross_berm_mirror.py 에도 그 기하를 케이스 둘로 넣었음(소단 있음/없음) — 12 → 14건.
배운 것 — 「걸어가며 그때그때 경사를 고르는」 루프는 한 걸음도 못 나아가는 상태를 반드시 막아야 함. 되풀이 상한은 마지막 방패이지 첫 방패가 아님.
사용자 지시 — 소단측구를 다루기 전에 소단부터 만들 것.
지금 없음 — 코드에 소단·berm 이 0건. 지금 「2단 비탈」은 소단이 아니라
2단계 절토 경사(암 경계 위아래의 경사 차)임. 평평한 턱이 아니라 경사가 두 번 꺾이는 것뿐임.
닿는 범위가 넓음 — 소단이 서면 횡단 설계선이 바뀌고, 그러면 면적 → 유토곡선 → 수량 → 3D 코리도 → 횡단도·종단도가 전부 따라 움직임. 오늘 고친 계통(사용자 값이 재계산에서 살아남기)도 같이 걸림.
폼 기본값 확정 (2026-09-07) — 폭 0.5m · 간격(사면길이) 3.0m · 기울기 안쪽 2°
-
근거 — 별표2 범위(사면길이 2
3m 마다 · 폭 50100㎝) 안에서 가장 적게 파는 조합 (폭 하한 + 간격 상한). 기본값은 되돌리기 쉬운 쪽이어야 함 — 더 넣는 것은 폼에서 한 번이지만 이미 판 것을 되돌리면 전 측점 재계산임. -
소단은 비탈을 완만하게 만듦 — 경사 1:1 절토면 기준 실효 경사:
폭 · 간격 실효 경사 0.5m · 3m (확정) 1 : 1.24 1.0m · 3m 1 : 1.47 1.0m · 2m 1 : 1.71 폭 1.0·간격 2 를 기본으로 잡으면 설계 경사 1:1 이 실제로는 1:1.7 로 서서 다른 비탈이 됨.
-
소단측구를 나중에 올리려면 폭이 모자람(측구 너비 0.5~1m) — 그때 사용자가 폼에서 1.0m 로 올리면 됨. 기본값을 미리 1.0 으로 잡아 모든 소단을 넓게 파는 것보다 나음.
-
기울기 2° 는 사용자 확정값. 코드 주석 근거 표기 「2026-09-07 사용자 확정 — 법령·교본 근거 없음」.
성토면 소단 vs 벽 — 「벽이 선 측점은 소단을 안 놓음」 (2026-09-07 확정)
- 성토측에 기슭막이가 서면 성토 설계선을 벽 상단에서 끊고 노견→벽 성토선을 대신 그림
(
designTrim). 그 측점의 성토면은 이미 벽이 대신 그리고 있어 소단이 끼어들 사면이 없음. 다단 벽은 단 사이 성토부선이 이미 소단 노릇을 함 — 또 놓으면 단이 두 겹이 됨. - 판정 단위는 측점 — 구간 전체를 막지 않음. 사용자가 넣은 소단 구간이 벽 있는 측점을 지나가면 그 측점만 건너뛰고 카드에 표시. (구간째 거부하면 배수관 유출 기슭막이가 있는 측점 때문에 못 쓰게 됨 — 시험 프로젝트에서 48곳.)
- 나중에 다시 볼 여지 — 벽이 낮고 그 위 사면이 길면 벽 위쪽에 소단이 필요할 수 있음. 그런 측점이 실제로 나오면 그때 벽 위 구간만 놓는 것으로 넓힐 것.
━━━ ⑦ 사용자 정정 (2026-09-07, 실무자 확인 완료) — 소단·소단측구를 「구조물」로 옮김 ━━━
수량을 어떻게 셀지 물었더니 자리 자체가 바뀌었음. 둘 다 구조물 배치 컨테이너 안으로 들어가므로, 연장은 놓은 구간 길이로 다른 구조물과 같은 길에서 나옴 — 「개수 × 길이」 문제가 사라짐.
사용자 원문
- 소단
- 소단은 구조물배치 컨테이너의 내부로 이동되어야함.
- 구조물군은 사면안정, 종류는 소단으로 추가
- 기본 양식은 다른 옹벽이나 기슭막이처럼 기준측점 입력 2개, 상세옵션으로 기준측점 전과 후 각 1개 그리고 폭, 간격, 안쪽 기울기를 넣어주면 됨. (안쪽 기울기 기본값 2도 > 0도 변경)
- 소단 측구
- 구조물 배치 컨테이너의 종단배수에 항목있음.
- 기본 입력 값은 기준측점 입력 2개
- 세부 옵션 기준측점 전, 후 입력, 폭, 안쪽 기울기, 간격이 있을것같음.
- 소단과 거의 동일하나 안쪽 기울기의 경우 사면쪽으로 기울여져야함. (소단과 반대.)
- 소단측구를 「그릴」지는 뒤로 — 사용자 확정 ㉯(「일단 수량만, 그림은 나중에 검토」) 그대로. 지금은 값만 받고 안 그림이라 「사면 쪽 기울기」는 기록만 되고 화면에 안 보임. 그리기로 하면 그때 소단 위에 얹고 부호를 화면에서 확인할 것(시험으로는 안 걸리는 자리).
3-11. 소단이 화면을 멈추던 사고 — 실화면 재확인 (2026-09-08)
80db17d4 로 고친 뒤 같은 조작을 그대로 다시 해 확인함(용화 5601e828 · route 169 ·
측점 48+0 에 소단, 폭 0.5·간격 3·기울기 0).
| 고치기 전 | 고친 뒤 | |
|---|---|---|
| 소단 추가 → 재계산 | 25분 넘게 안 끝남(렌더러 1.4코어 계속) | 17초에 끝남 |
| 그 측점 절토 | (못 잼) | 9.93 → 6.38㎡ (계단이 서서 값이 바뀜) |
· 서버(파이썬)는 그때도 0.01초에 끝났음 — 화면만 물리는 사고라 「그냥 느리다」로 오진하기 쉬운 자리였음(25 가 계획서 3-9 에 그 문장으로 남김). · 시험용 소단은 지웠고 값도 9.93㎡ 로 되돌아왔음. [저장] 안 했으므로 정본은 안 건드림.
3-13. 실화면 검증이 남의 창 수치를 바꾼다 — 통로 셋 (2026-09-08)
하루에 두 번, 데스크탑 창이 「값이 저절로 움직였다」로 추적하다 이쪽 검증이 원인으로 밝혀짐.
탓할 일이 아니라 구조를 몰랐던 것이며, 오늘 처음 실물로 드러남. DB 는 원격 한 대
(dsm.chemifactory.com)를 4환경이 같이 씀.
통로 셋 — 셋째가 제일 안 보였음.
- [확정]이 전 측점을 다시 계산해 정본에 씀.
- [저장]도 다시 계산해 씀 — 「저장은 그대로 담는 것」이 아님.
- ⚠ 그 사이 서버 코드가 바뀜. 같은 자료를 다른 코드로 두 번 계산하면 값이 달라짐.
실측: 앞 기준선(코드 09-07 17:46) ↔ 다음 저장(코드 09-08 00:41) 사이에 성토 −16.8%,
측구터파기가 기계 −19.1 / 브레카 +16.7 로 서로 반대(토사↔암이 옮겨간 모양).
그 사이 들어온 것 — 사면 구간 재료를 그린 경사비로 가름(
4e7a4bf7), 성토면 소단 + 옹벽 의무 판정 재정의(db4f17fb·c7770b75).
⇒ 저장된 「정본」은 코드 버전에 매여 있음. 되받기 뒤 아무 창이나 [저장] 한 번이면 수치가
통째로 갱신됨. 대조할 때 자료 시각과 코드 시각을 함께 볼 것(GET /api/health 의 code_mtime).
- 검증용 프로젝트 나눔 — 사용자 승인(2026-09-08). 이쪽 몫은
5601e828(용화 확폭검증, 단면 664·설계 105측점) 그대로 둠. 데스크탑 두 창이 각자 몫(b269ea34·2f940d8a)으로 옮겨 갔으므로 더 옮길 까닭이 없음.- 빈 프로젝트(
fae94c66·89449bf5·325f57d9)는 단면 0 이라 B06 검증에 쓰려면 자동설계 체인을 처음부터 돌려야 함(90초+ · 원자료 필요). 이득 없이 비용만 큼. - ⚠ 사용자 활성
5cff3920은 아무도 손대지 말 것. - 추적 칸(
updated_at·updated_by)은 안 넣기로 사용자 확정 — 프로젝트를 나눴으므로 「누가 언제 바꿨나」를 물을 일이 없어짐. 마이그레이션 020~ 계획 취소. - [확정]·[저장]·노선 [확인] 전에 알리기(장부 규칙 6)는 그대로 유효함 — 추적 칸이 없어진 지금은 그 통보가 유일한 안전장치임.
- 빈 프로젝트(
- 찌꺼기 확인 끝 — route 169 정본에 소단 0건, 절토각 사용자값은 측점 0.0·20.0 에
0뿐. ⚠ 그 **0은 「표준값을 씀」**이라는 되돌림 표식임(0도로 깎는다는 뜻이 아님).