Files
Aislo/docs/raw/plans/2026-09-04_plan_700line_split.md
T
eomsangdonandClaude Opus 5 eb30b774f8 chore(docs): docs 폴더 git 추적 전환 · PLAN·OWNERS 최상위 이관
- `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>
2026-09-09 18:19:07 +09:00

141 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-09-04 700줄 제한 분리 완료 이관
> 두 창(laptop-main · laptop-sub)이 나눠 정리한 15개 분리분이며, 각 항목에 자체검증 기록이 붙어 있음.
> 위키 관리자의 2차 교차검증은 아직임(검증 대기).
> **미검증 하나** — B04 배수유역 라우터의 **쓰기 경로(분석 재실행)** 는 돌리지 않음. 그 확인은
> `docs/raw/PLAN.md` 「700줄 제한 위반 정리 — 남은 확인」 항목으로 남겨 둠.
### B05/B06 700줄 제한 위반 정리(2026-09-04 예정)
14개 중 10개 분리 완료 기록은 `docs/raw/plans/2026-09-02_plan_user_verified_completed_items.md`로 이관했다.
#### 2026-09-04 분리분 (laptop-main 담당 4개 — 검증 대기)
같은 원칙(순수 이동·공개 심볼 유지)으로 나눔. 서브 라우터는 **prefix 없이** 만들고 본체가
`include_router` 로 붙여 URL 문자열을 그대로 둠(중복 prefix 사고 방지).
- [x] `B03_FileInput/B03_FileInput_Router.py` 872 → **306줄**
(`_Router_Chunks.py` 389 = 세션·조각·마무리·진행 조회, `_Router_Helpers.py` 267 = 필수 파일
판정·중복 지문 판별·단계 기록·알림). 검증: 라우트 7개 경로·메서드 분리 전과 동일,
공용 브라우저에서 노선 5종 **실제 업로드 성공**(shp `metadata.preview_path` 포함, 25초),
`upload-overview` 200.
- [x] `B03_FileInput/B03_FileInput_Router_Temp.py` 749 → **478줄**
(`_Router_Temp_Chunks.py` 294, `_Router_Temp_Support.py` 46 = 조각 수·묶음 폴더·상태 갱신).
보조를 따로 뺀 이유는 본체·청크가 함께 써서 순환 임포트가 생기기 때문임.
검증: 라우트 10개(temp 9 + attach 1) 동일, **청크 흐름 실제 호출** — 묶음 생성 200 →
`upload-sessions` 200 → `chunks` 200 → `finalize` 200 → 삭제 200.
- [x] `B07_DesignDetail/B07_DesignDetail_Router_Support.py` 808 → **532줄**
(`_Support_Basin.py` 279 = 유역도 배경 GeoJSON·좌표 환산·도곽 클리핑,
`_Support_Io.py` 88 = 원본 JSON·매니페스트 입출력·측점 대응표).
`watershed_source`·`clip_line_to_box` 는 본체에서 `as` 로 재노출해 호출부 import 불변.
검증: 라우트 7개 동일, `design-drawings` 200 · `frame-template` 200.
- [x] `config/config_system.py` 937 → **255줄**
(`config_system_terrain.py` 186 = 5·5-2장 지형·지표면, `config_system_design.py` 520 =
5-3~5-6장 경로·유역·종횡단·계획선). 본체가 `import *` 로 재노출해
`from config.config_system import …` 호출부 불변.
검증: 분리 전 원본과 대조해 **공개 상수 243개 전부 값 동일**(빠진 것은 설계 모듈 내부
전용 `_SCS_SOIL` 하나 — 밑줄 시작이라 원래도 외부 참조 없음), 백엔드 재시작 후 기동 정상.
**합친 뒤 확인(2026-09-04, 두 창 분량 8개 모두 반영)**`tsc --noEmit` 통과,
`tmp/tests` **378 passed / 17 skipped**, 재시작 후 B03·B04·B05 화면 모두 정상 렌더.
남은 실패 요청 4건은 **분리 전에도 있던 자료 문제**(그 프로젝트에 포인트클라우드가 없어
`surface/point-cloud` 404, `routes/128/corridor` 404·413) — 이번 변경과 무관함.
**아직 남은 700줄 초과 7개**(다음 차례) — `B05_Profile_UI_Structures_Panel.ts` 1024(보류 항목),
`B04_PreProcess_UI_TerrainViewer.ts` 958, `B03_FileInput_UI_Page.ts` 925,
`ui_template_elements.ts` 917, `B07_DesignDetail_UI_Page.ts` 732,
`common_util_cross_design.ts` 728, `B05_Profile_UI_Profile_Panel.ts` 726.
#### 2026-09-04 분리분 (laptop-sub 담당 4개 — 검증 대기)
동작 불변이 목표라 **순수 이동**만 함(로직·이름·기능 변경 없음). 진입 파일은 같은 이름·같은
공개 심볼을 유지하고, 잘라낸 조각을 진입 파일이 불러 붙임.
- [x] `B05_Profile/B05_Profile_UI_Style.css` 1379 → **592줄**
(`_Style_Table.css` 515 · `_Style_Drainage.css` 289). 진입 TS 두 곳
(`B05_Profile_UI_Page.ts`·`A00_Common/b_structures_section.ts`)에서 본체 다음에 순서대로 불러
캐스케이드 유지. 검증: 종단 패널 캡처가 분리 전과 **바이트 단위 동일**(md5 `ee6bc8b52adb`),
계산 스타일 실측(표 이름표 sticky 78px · 편집 버튼 21×17 · 줌 22×22 · 배수유역 flex).
- [x] `B04_PreProcess/B04_PreProcess_UI_Style.css` 870 → **565줄** (`_Style_Map.css` 312).
검증: 두 파일을 다시 이으면 원본과 경계 빈 줄 1개 외 완전 동일, B04 화면 실측
(`.b04-map` flex column gap 12px · 896×828, 좌측 폼 gap 16px, 3D·2D 렌더 정상).
- [x] `B04_PreProcess/B04_PreProcess_Router.py` 718 → **493줄**
(`_Router_Status.py` 221 = 상태 조회·모델 프리뷰, `_Router_Progress.py` 47 = progress.json 헬퍼).
상태 라우터는 prefix 없이 만들고 본체가 `include_router` 로 붙임(중복 prefix 사고 1건 잡음).
진행률 헬퍼를 별도 모듈로 뺀 이유는 본체·상태 라우터가 함께 써 순환 임포트가 생겨서임.
`write_surface_progress` 는 본체에서 계속 재노출(B03 서비스가 참조).
검증: 경로 9개 분리 전과 동일, 백엔드 재시작 후 `/surface/status` 200(진행률 100·모델 3),
`/surface/models` 200, `/surface/models/415/preview` 200 `model/gltf-binary` 7,946,756B.
- [x] `B04_PreProcess/B04_PreProcess_Router_Watershed.py` 714 → **518줄**
(`_Router_Watershed_Output.py` 225 = `.npz`·스테이지 기하 쓰기와 응답 좌표 변환 헬퍼).
공개 심볼 `router` · `get_primary_region` · `CONTOUR_FILE` · `STREAM_FILE` 유지.
검증: 경로 2개 유지, `/drainage/rainfall` 200(관측소 영양군 도곡리), `/drainage/primary-region`
200(schema_version 3 · upstream_lines 포함), B05 화면 유역 11개·측점 66개 정상,
옮긴 순수 헬퍼 6개 직접 호출 스모크 통과. 단 **분석 재실행(쓰기 경로)은 돌리지 않음**
30초 재계산이 작업본 산출물을 덮어써서, 순수 이동임을 텍스트 대조·임포트로 확인하는 데 그침.
- 공통: `ruff check` 전체 통과·`ruff format` 적용, `tsc --noEmit` 통과, `tmp/tests` 183 passed.
#### 2026-09-04 2차 분리분 (laptop-main 담당 4개 — 검증 대기)
- [x] `ui_template/ui_template_elements.ts` 917 → **363줄**
(`_styles.ts` 369 = `injectBaseStyles()` 규칙 문자열 · `_chart.ts` 185 = 공통 라인 차트 ·
`_base.ts` 33 = 요소 생성 헬퍼 `el`, 셋이 함께 써 순환 방지). 본체가 `export *` 로 재노출.
검증: 분리 전 `export` 25개 유지(+`el` 공개 추가), `tsc --noEmit` 통과.
- [x] `B03_FileInput/B03_FileInput_UI_Page.ts` 925 → **692줄**
(`_Page_Flow.ts` 262 = 중단 세션 이어올리기·보관함 이관·청크 업로드·재잠금·서비스워커,
`_Page_Rules.ts` 107 = 필수 카드·파일 적합성·업로드 가능 판정·서버 파일의 카드 매핑).
화면 상태는 `UploadFlowContext` 창구로만 넘기고, 규칙은 상태를 가두지 않는 순수 함수로 둠.
검증: 새 프로젝트를 만들어 노선 5종을 **실제로 골라 업로드** — 카드 5장 선택 시
[파일 업로드] 비활성, [LAS 없이 설계] 켜면 활성(판정 규칙 정상), 업로드 후 4장 완료(20초).
- [x] `common_util/common_util_cross_design.ts` 728 → **405줄**
(`_geometry.ts` 333 = `SectionGeometry`·행진 상수·`sideRole`·`ResolvedGroup`).
파이썬 짝(`B06_Section_Engine_Design.py`)은 손대지 않아 미러 관계 유지.
검증: B06 횡단 카드 실측과 서버 계산값 대조 — 측점 0 절토 화면 2.50㎡ / 서버 2.4985㎡,
성토 1.85㎡ / 1.8521㎡ 일치(카드 273장). 미러 테스트는 laptop-sub 폴더에서 10 passed.
- [x] `B07_DesignDetail/B07_DesignDetail_UI_Page.ts` 732 → **517줄**
(`_UI_Panels.ts` 234 = 도면 목록 12분류·측점 설계 정보 카드).
검증: B07 화면 도면 목록 패널 1개·항목 54개(「설계 도면 49건」), CAD iframe 로드, 콘솔 오류 0.
- 공통: 분리 전 `export` 목록과 대조해 **누락 0**(`export *`·`export { } from` 재노출 포함),
`prettier` 적용.
#### 700줄 제한 — 전수 점검 결과 (2026-09-04)
**초과 파일 0건.** 이번에 두 창이 15개를 나눠 정리했고(1차 8개 · 2차 7개), 마지막까지 남았던
`B05_Profile_UI_Structures_Panel.ts`(보류 항목)도 처리됨. 합친 뒤 확인 —
`tsc --noEmit` 통과, `tmp/tests` **378 passed / 17 skipped**(메인 폴더 기준),
B03·B04·B05·B06·B07 다섯 화면 렌더 정상. 남은 실패 요청은 그 시험 프로젝트에 자료가 없어
분리 전에도 나던 것(`design-drawings`·`surface/point-cloud` 404, `routes/128/corridor` 404·413).
#### 2026-09-04 2차 분리분 (laptop-sub 담당 3개 — 검증 대기)
- [x] `B05_Profile/B05_Profile_UI_Profile_Panel.ts` 726 → **688줄**
(`_Profile_Panel_Types.ts` 52 = 콜백 타입). 진입 파일이 다시 `export` 해 옛 임포트 경로 유지.
검증: 종단 패널 측점 66개·표 12행·줌 7개·유역 11개 정상, 방향키 862.99→863.09m, `Ctrl+Z` 복귀.
- [x] `B04_PreProcess/B04_PreProcess_UI_TerrainViewer.ts` 958 → **698줄**
(`_Chrome.ts` 209 = DOM 뼈대, `_Contours.ts` 189 = 등고선 적재). 검증: 뷰어 2개 렌더,
등고 라벨 40개(상한), 범례 940/760m, 토글 끄면 0 → 켜면 40, 간격 5m 적용·1m 복귀 정상.
- [x] `B05_Profile/B05_Profile_UI_Structures_Panel.ts` 1024 → **669줄**
(`_Types.ts` 94 · `_Commit.ts` 312 = 폼 왕복·저장 · `_Events.ts` 146 = 입력 배선).
**보류였던 항목**(2026-09-03 「B」)을 2026-09-04 사용자 지시로 착수. 저장 동작에 닿는
`commit()`·폼 로드가 조각으로 갔으므로 시험 프로젝트에서 실제 조작으로 확인함:
C 사면안정/옹벽을 기준측점 5+0 에 [추가] → 목록 반영, [저장] → 서버 정본 2건(revision 0→1),
새로고침 뒤 [삭제] → [저장] → 서버 0건(revision 4). 시험 프로젝트는 원상 복구(구조물 0건).
- 곁가지로 확인된 **기존 동작**(이번 분리와 무관): 방금 [추가]해 아직 저장 전인 항목은
`structure_id` 가 없어 [삭제]가 듣지 않음. 저장 뒤에는 정상 삭제됨. 분리 전과 같은 분기라
이번 변경 탓이 아니며, 고칠지는 사용자 판단 사항으로 남김.
- [x] **회귀 1건 확인·수정**(2026-09-04, laptop-main 이 `5df79d2d` 로 수정) — 구조물 패널을
쪼갤 때 `structures`·`optionInputs` 를 컨텍스트에 **참조로** 넘겼는데 패널이 그 배열을
재할당(`structures = next.map(...)`)해 조각이 옛 배열을 고치고 있었음. 증상은 「저장 전
[삭제] 무동작」. 두 배열을 `const` 로 두고 내용만 갈아끼우도록 고침.
- 내 나머지 분리분 재점검 결과 같은 패턴 **없음**: `_TerrainViewer_Contours`
`labelElements``const` + `length = 0` 로 비우고, `camera`·`contourGroup`·DOM 참조도
전부 `const`. 구조물 패널의 `types`·`pipeFacilities` 는 애초에 getter(`() => …`)로 넘겼음.
- 재확인(시험 프로젝트 실조작): [추가] 목록 11→12, **저장 전 [삭제]** 12→11·옹벽 0개,
서버 정본은 0건·revision 8 그대로(쓰기 없음).
- 공통: 분리 전 `export` 목록과 대조해 **누락 0**, `tsc --noEmit` 통과, `prettier` 적용,
`tmp/tests` 183 passed(미러 테스트 `test_b06_cross_design_mirror.py` 10 passed 포함).
- [x] **보류였던 두 덩어리 해소**(2026-09-04) — `commit()` 과 옵션 필드 렌더·시설 폼 로드는
`_Commit.ts` 로 옮겼고, [추가]·[삭제]·[저장] 실동작으로 확인함(위 2차 분리분 기록 참조).
파일은 669줄로 제한 이내.