- `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>
141 lines
12 KiB
Markdown
141 lines
12 KiB
Markdown
# 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줄로 제한 이내.
|