knowledge(요구): 분석 603 — 전처리 로직 점검 · 확정 없을 때 기본값 셈 · B04 조합 짓기가 확정 풂 · 미리 셈 거는 곳 셋뿐 · 끊김 이어 셈 없음 · 고칠 걸음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015uTVHFZkNcUa1SR4cNcENM
This commit is contained in:
2026-11-03 13:02:16 +09:00
co-authored by Claude Opus 5.5
parent a16fb1c039
commit 5043f29a62
@@ -0,0 +1,55 @@
# 603-3 점검 — LAS → 점 필터 → 서피스 → 확정 → 추천노선 한 줄 (조사만)
코드 · storage · DB 손대지 않음(읽기 · SELECT 만). 실측 = 랩탑 storage B 프로젝트 14 개 · 11-03 12:5x.
## 결론
1. 확정이 살아 있으면 추천은 확정 필터 · 서피스 그대로 — implicit 높이도 B05 종횡단 표본기(굳힌 격자)와 같음(유효 마디 86,153 개 최대차 0.00003 m). 다만 결과물을 읽지 않고 RBF 를 따로 다시 셈(17 s) · 파일이 없으면 조용히 DTM 으로 바꿔 셈.
2. 확정이 없으면 막지 않고 기본값(ptd · implicit · 평활 끔)으로 슬쩍 셈 — 확정 읽기가 단계 상태를 안 봄. B04 화면에서 「안 지은 조합」 하나만 골라 지어도 확정 · 라이다 적어 둔 값까지 지워짐(가이드 12:10 = 이 길 정황).
3. 미리 셈은 체인 셋(업로드 · B04 [확정] · B01 범위)에서만, 그것도 체인이 끝까지 가야 걸림 — B04 [분석] · LAS 갈음 · 옮겨 심기 · 코드 판 올림 · 표준 횡단면 · 도로 등급 바꿈 뒤엔 아무도 안 셈.
4. 「같은 서피스」 판정 = 파일 시각 · 크기 — 14 프로젝트 지형 파일 내용은 모두 같은데 시각이 14 갈래. 결과물 내용 지문이 맞는 열쇠.
5. 끊기면 그만 — 진행이 메모리에만 있어 재시동이면 사라지고 이어 셈 없음 · 화면은 「전처리 다시 · [재계산]」 글만(단추 없음 · 진행 묻기 안 부름).
## 흠 표
| # | 흠 | 자리(파일:줄) | 사용자에게 보이는 꼴 | 근거(코드 · 실제 파일 수치) |
| --- | --- | --- | --- | --- |
| 1 | 확정 없을 때 기본값으로 셈 | `common_util/common_util_surface_confirmation.py:52-75` · `B05_Profile/B05_Profile_Router_RouteInitial.py:120` · `:332` | 확정 풀린 프로젝트 추천이 지정 안 한 ptd 지형으로 나오거나 「DTM 파일을 찾을 수 없습니다」 409 | 단계 상태 안 봄 · 칸 없으면 config 기본(ptd · implicit · 끔) · dtm_ptd 있는 곳 4(38ebe4d8 · b69d9ffa · cb15892a · dbf9f6d0) = 바로 ptd 로 셈 · 가이드 = dtm_ptd 없음 → 409 |
| 2 | B04 [분석] = 확정 지움 · 「조합 하나 더 짓기」도 같은 길 | `B04_PreProcess/B04_PreProcess_Router.py:109-110` · `common_util/common_util_workflow_state.py:102`(params 통째 갈음) · `B04_PreProcess/B04_PreProcess_UI_Page.ts:410-441` | 관리자가 B04 드롭다운에서 안 지은 조합(예 csf · implicit)을 고르면 확정 · `las_selection` 사라짐 · 뒤 단계 STALE · 추천 409 | 의도 = 「재분석 시 재확정 요구」(`Repository.py:291`) · 그러나 조합 짓기도 같은 요청 · 가이드 implicit_csf 12:11 · manifest 12:12(12:10 분석과 맞음) · 확정 지형 dtm_classification 은 08:11 그대로 = 내용 안 바뀌었는데 풀림 |
| 3 | 추천 비용면이 확정 결과물(굳힌 격자) 대신 RBF 를 따로 셈 | `B05_Profile/B05_Profile_Engine_Solver.py:116-134` | 첫 갈래 76~117 s 의 한 몫 · 높이 차는 없음 | 12 프로젝트 유효 마디 최대차 0.00003 m(float32 반올림) · 지표면 밖 첫 줄 최대 10.2 m(탐색은 유효 칸만 → 영향 없음) · 짓기 17.4 s 대 굳힌 격자 읽기 0.00 s |
| 4 | 파일 없거나 깨지면 조용히 DTM | `Solver.py:143-144` · 서명은 있는 파일만 `:149-166` | implicit 확정인데 DTM 높이로 셈 · 이름은 implicit 그대로 · 같은 때 B05 종횡단은 오류 → 추천 · 설계가 다른 지형 | `except Exception: return dtm_z` · 표본기는 `implicit_grid_npz` FileNotFoundError · 위 4 프로젝트 dtm_ptd 있고 implicit_ptd 없음(확정 풀리면 바로 이 꼴) |
| 5 | 「같은 서피스」 = 파일 시각 · 크기 | `Solver.py:169-175` · 계류 `B05_Profile/B05_Profile_Engine_RouteInitial.py:170-171` · 초기 종단 `B05_Profile/B05_Profile_Engine_InitialProfile.py:215-224` | 내용 같아도 옮겨 심기 · 동기화 · 다시 짓기면 「저장본 없음」 | 14 프로젝트 내용 지문 모두 같음(dtm 709be255 · implicit 79c8c3e9 · 굳힌 격자 4997c942 · 평활 a43e4e7b) · 수정 시각 11-01 21:30 ~ 11-03 08:11 |
| 6 | 초기 종단 열쇠 = 그 필터 파일 전부 | `B05_Profile/B05_Profile_Router_RouteInitial_Initial.py:104` | 확정과 무관한 tin · 평활 · 굳힌 격자 늦은 다시 짓기만으로 초기 종단 「저장본 없음」 | `*_{필터}*.npz` glob · 가이드 굳힌 격자 08:11:54 = dtm 옮겨 심은 5 초 뒤 시각 견줌(`common_util_surface_sampler.py:209`)으로 다시 지음 |
| 7 | 초기 종단 목표 계획고는 늘 설계 지형 | `Router_RouteInitial.py:536` ↔ `_Initial.py:134 · 138` | 수치지형도 갈래 추천의 초기 종단 = 라이다 계획고 + 수치지형도 지반선 섞임 | `balanced_profile_of` 가 확정 params 를 다시 읽음 · 지반선 표본기는 고른 분석 지형 |
| 8 | 미리 셈 거는 곳 셋뿐 | `B03_FileInput/B03_FileInput_Service_Chain.py:352 · 674` · `Router_RouteInitial.py:425` | B04 [분석] · B05 LAS 나중 올리기 · 옮겨 심기 · 코드 판 올림 · B06 표준 횡단면 [저장] · 도로 등급 · 설계속도 바꿈 뒤 추천 「저장본 없음」이 다음 체인까지 | LAS 갈음 `B05_Profile/B05_Profile_Router_Lidar.py:221-233` 예약 없음 · `_Store.py:177` 다른 판 안 꺼냄 → 박동철 v8(10-18) 뒤 0 벌 · 표준 · 상한은 열쇠 칸 · 설계 지형 바꿈은 열쇠 그대로라 괜찮음 · 복제(robocopy)는 시각 살려 괜찮음 |
| 9 | 체인이 끝까지 가야만 미리 셈 | `Service_Chain.py:352`(B06 확정 · 스냅샷 뒤) · `:674` | 체인 중간 실패 = 추천도 없음 | 추천은 지형 · 예정노선만 씀(노선 · B06 무관) |
| 10 | 끊기면 그만 · 한 갈래 409 면 전부 멈춤 | `Router_RouteInitial.py:28`(메모리) · `:308-316` | 재시동 · 오류 뒤 남은 갈래 · 지형 영영 없음 | 진행 기록 파일 · 켤 때 · 다음 열 때 이어 셈 없음 · sub8 23:19 미리 셈 직후 재시동 「끝」 없음(602) |
| 11 | 화면 알림이 길을 못 알려 줌 | `B05_Profile/B05_Profile_UI_RouteEdit_RecPreview.ts:87-92` · 글 `Router_RouteInitial.py:30` · `B05_Profile/B05_Profile_Api_RouteInitial.ts:87` | 토스트 「전처리를 다시 하면 생깁니다 · [재계산]이면 지금 셉니다」 — 단추 없음 · 전처리 다시(B04 분석)는 오히려 확정을 풂 · 셈 중 · 끊김 · 지형 바뀜 못 가름 · 같은 페이지 기억(`lines`)은 지형 바뀌어도 옛 선 | `fetchPrecomputeProgress` 부르는 곳 0 |
| 12 | (의도 · 참고) 추천 점수 = 2 m 비용면 | `B05_Profile/B05_Profile_Engine_RouteInitial_Profile.py:71-81` | 화면은 선만 → 수치 안 보임 | 노선 따라 1 m 굳힌 격자와 최대 0.36~0.63 m · 평균 0.04 m · 지침 「2 m 비용면은 노선 추천 점수만」 |
## 다른 파생 저장본(5번)
- 등고선 — 모델보다 옛것이면 GET 이 다시 뽑음 · 낡음 없음(옮겨 심으면 시간만).
- 배수 세부 · 도엽 지표 · `_derived/` — 같은 시각 열쇠 꼴(`B04_PreProcess_Router_Basins.py:164` · `B04_PreProcess_Router_Watershed.py:152` · `common_util_derived_store.py:33`) · GET 이 다시 셈 → 느려짐만.
- 초기 노선(초기값 스냅샷) — 재확정 체인만 지움 · B04 분석 · LAS 갈음은 안 건드림 → 옛 지형 기준 [초기화] 남음(작은 흠).
- B06 미리 계산 · 3D 저장본 — 입력 전부 지문 · 낡으면 「늦음」 + [3D 업데이트] → 흠 없음.
- 「GET 이 셈 안 함」(505-1)이 걸린 추천 · 초기 종단 둘만 「없음」으로 굳음.
## 고칠 걸음(차례)
- [ ] 603-3a 확정 없으면 추천 안 셈 — `common_util_surface_confirmation.py` 에 `confirmed_surface_params()`(stage 1 COMPLETE · params 에 source_filter 있을 때만 · 아니면 None) · `Router_RouteInitial.py` compute_initial · precompute_terrains 가 이것만 씀 · None = 409 「지표면 확정 전 — B04 [확정] 뒤 추천이 생김」 · 미리 셈은 건너뜀 로그 · ~20 줄 · 확인 = 시험(params 비운 프로젝트 → 409 글 · 저장본 · 비용면 파일 안 생김)
- [ ] 603-3b 비용면 = 확정 결과물 그대로 — `Solver._sample_surface_on_grid` implicit 갈래를 `implicit_grid_npz()` 읽어 같은 마디로 자름 · `except Exception: return dtm_z` 걷음(없으면 까닭 그대로 409) · `_source_npz_paths` 에 굳힌 격자 · -25/+8 줄 · 확인 = 거울 시험(비용면 z = 굳힌 격자 마디 · 유효 칸 차 0 · 파일 없음 → 409 · 짓기 17 s → 1 s 안)
- [ ] 603-3c 같은 서피스 = 내용 지문 — `Solver._cost_surface_signature` · 계류 지문(`Engine_RouteInitial.py:170`) · 초기 종단 `stat_marks` 를 파일 내용 blake2b 로(프로세스 기억 열쇠 = 경로 · 시각 · 크기) · 초기 종단 대상 = 확정 지형이 읽는 파일만(glob 걷음) · ~25 줄 · 확인 = 시험(같은 내용 다른 시각 = 같은 열쇠 · 한 바이트 바꿈 = 다른 열쇠)
- [ ] 603-3d B04 「조합 하나 더 짓기」는 확정 안 풂 — analyze 요청 칸(`keep_confirmation`) → start_stage · clear_confirmed 건너뛰고 stage 1 params 합침(`merge_stage_params`) · 전체 다시 분석(force · LAS 바뀜)만 풂 + 그때도 `las_selection` 남김 · `B04_PreProcess_Router.py` ~15 줄 · `UI_Page.ts:436` 한 줄 · 확인 = 시험(조합 짓기 뒤 params · CONFIRMED 행 · 뒤 단계 상태 그대로)
- [ ] 603-3e 서피스 바뀐 자리에서 다시 셈 — `schedule_precompute` 를 B04 [분석] 끝(확정 남아 있을 때) · B05 LAS 나중 올리기 끝(`Router_Lidar.py` work)에 · 체인 둘은 실패 길에서도 걸게(finally) · ~10 줄 · 확인 = 시험(각 길 끝 예약 한 번 · 체인 B06 실패에도 예약)
- [ ] 603-3f 끊기면 이어 셈 — 진행 기록 `route_recommend/_job.json`(`common_util_lidar_upload.note_job · saved_job` 꼴 재사용) · 한 갈래 409 는 그 갈래만 건너뜀 · 추천 요청이 409 이고 기록이 「끊김」이면 그 서버가 이어 셈 예약 · ~30 줄 · 확인 = 시험(running 기록 + 409 요청 → 예약 한 번 · 도는 중 안 겹침)
- [ ] 603-3g 화면 알림 — RecPreview 409 때 진행 묻기 → 「추천 셈 중 n/m」 · 끝나면 다시 그림 · 아니면 「지표면이 바뀌어 다시 셈해야 함」 + [지금 셈](그 갈래 recompute) · NOT_PREPARED 글 고침 · 지형 바뀌면 `lines` 비움 · TS ~30 줄 · 확인 = ORCA(저장본 뺀 검증 프로젝트로 409 → 진행 글 → 선)
- [ ] 603-3h 초기 종단 목표 = 고른 지형 — `balanced_profile_of` 에 selection 인자 · `_Initial.py:134` 넘김 · ~5 줄 · 확인 = 시험(sheet 갈래 목표 · 지반 같은 지형)
- [ ] 603-3i (일회 · 코드 아님) 3c 뒤 열쇠가 다 바뀜 → B 프로젝트 14 개 미리 셈 한 번(프로젝트당 2~5 분 · 서버 한 대에서 차례로)
## 고를 갈래
- A 같은 서피스 열쇠 — ① 내용 지문(권함 · 옮겨 심기 · 동기화 · 다시 지어도 같으면 그대로 · 2~6 MB 읽기 수 ms) ② 확정 모델 id + 짓기 설정 서명 + LAS 지문(파일 안 읽음 · 복제면 id 바뀜 · 서명 밖 코드 고침 못 잡음) ③ 시각 유지 + 옮겨 심기 도구가 시각 보존(흐름 안 고침).
- B 확정 없을 때 — ① 추천만 막음(권함 · 작음) ② `get_surface_confirmation_params` 자체가 None → B05 · B06 · B07 등 모두 「확정 전」(근본 · 고칠 곳 많음 · 별 일감).
- C 저장본 없을 때 화면 — ① 셈 중이면 진행 · 끊겼으면 이어 셈 · 아니면 [지금 셈](권함) ② B05 열 때 없으면 자동 미리 셈(505-1 되돌림 · 서버 여럿이 storage 를 같이 써 겹쳐 셀 수 있음) ③ 글만.
- D B04 분석의 확정 해제 — ① 조합 짓기 = 유지 · 전체 다시 분석 = 해제(권함) ② 늘 유지 · 확정 파일 내용 지문이 바뀐 때만 해제 + 재확정 체인 ③ 지금대로.