# 2026-09-01 구현 완료·최종 검증 대기 항목 원문 상시 계획서에서 구현 체크는 제거하고 최종 검증 항목만 유지하기 위해 분리한 원문이다. 이 파일은 완료 아카이브가 아니며, 검증 통과 전까지 보류 상태다. ### 노선 원천 일원화 + 도엽 서피스 온디맨드 (2026-09-01 신규) #### ③ 트림된 지점이 종점 - [X] `common_util_route_geometry.py` — `load_design_route(project_root, surface_params)` 신규: 읽기 → 프로젝트 좌표계 변환 → 트림 → 조밀화를 한 곳에서 - [X] `Service_Chain.py` — 공용 함수로 교체 - [X] `common_util_drainage_context.py` — 공용 함수로 교체 (sampler를 노선보다 먼저 연다) - [X] `B04_PreProcess_Router_Inflow.py` — 공용 함수로 교체 - [X] `config_system.py` — `SHEET_SURFACE_AUTO_METHODS` 신규(기본 1종) - [X] `B04_PreProcess_Engine.py` — 도엽 서피스 자동 생성은 기본 1종만 - [X] B04 도엽 방식 버튼 — 저장 안 된 방식이면 모달 후 그 방식만 생성 ### B04 노선 3D 표시 + 서피스 밖 노선 자동 트림 (2026-09-01 신규) #### ② 서피스 밖 노선 자동 트림 - [X] `config_system.py` — `SURFACE_ROUTE_EDGE_TRIM_M`(30.0) 신규 - [X] `common_util_route_geometry.py` — `trim_route_to_surface()` 신규 (valid 구간 추출 + 잘린 끝만 여유 트림) - [X] 트림은 `load_design_route()` 안(`common_util_route_geometry.py:263`)에서 수행 — `Service_Chain._planned_route_points_in_project_crs()` 는 그 함수를 호출만 함 (계획은 Service_Chain 에 두려 했으나 공용 로더로 모음) - [X] `B04_PreProcess_UI_TerrainViewer.ts` — `setRoute()` + 최고 표고 평면에 노선 그리기 - [X] `B04_PreProcess_UI_Page.ts` — `fetchPlannedRoute()` 결과를 뷰어에 전달 ### 보조 워크트리 포트 분리 — 메인 8000/5173 · 보조 8001/5174 (2026-08-31 신규) - [X] `.claude/dev_up.py` — 포트 자동 판별 + 자식에 env 주입 - `IS_SUB = os.path.isfile(os.path.join(ROOT, ".git"))` - `API_PORT = int(os.environ.get("AISLO_API_PORT") or (8001 if IS_SUB else 8000))` - `VITE_PORT = int(os.environ.get("AISLO_VITE_PORT") or (5174 if IS_SUB else 5173))` - 헬스체크·`port_open`을 상수 대신 이 변수로 - `spawn_detached(args, log_path, env)` — 자식에 `SERVER_PORT`·`FRONTEND_DEV_PORT`· `AISLO_API_PORT`·`AISLO_VITE_PORT` 4개 주입 (main.py의 `_frontend_process_env`가 `os.environ`을 복사하므로 npm→vite까지 그대로 내려간다) - 출력에 폴더 종류·포트 표시 - [X] `vite.config.ts` — `server.port: Number(process.env.FRONTEND_DEV_PORT ?? 5173)` (main.py가 CLI `--port`로 덮지만, `npm run dev` 맨손 실행 시 보조가 5173을 뺏는 것 방지) - [X] `CLAUDE.md` 7장 — "백엔드·DB는 8000 하나를 공유한다" 문단을 새 규칙으로 교체 (보조 = 8001/5174 자동, `--host --port` 수동 지정 문구 삭제) - [X] 자체검증 - 메인 `dev_up.py` 실행 → `FOLDER=메인 클론 PORTS=8000·5173`, vite up. **회귀 없음** - 폴더 판별 실측 — 메인 `.git`=디렉터리 → 8000·5173 / 보조(`C:/Aislo_wt/aislo-b0506`) `.git`=파일 → 8001·5174. `browser_driver.py:38` 이 `AISLO_VITE_PORT` 를 읽어 창 포트도 따라감 - 동시 기동 무충돌 — 보조 백엔드(pid 2908)가 8001, 메인(pid 2252)이 8000 을 동시 점유. **남은 것: 보조 폴더에서 `dev_up.py` 직접 실행은 미검증** (그 폴더가 수동 기동 중이라 재기동 시 상대 창 세션 끊김 — 해당 창에서 확인 필요)