- `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>
12 KiB
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 사고 방지).
B03_FileInput/B03_FileInput_Router.py872 → 306줄 (_Router_Chunks.py389 = 세션·조각·마무리·진행 조회,_Router_Helpers.py267 = 필수 파일 판정·중복 지문 판별·단계 기록·알림). 검증: 라우트 7개 경로·메서드 분리 전과 동일, 공용 브라우저에서 노선 5종 실제 업로드 성공(shpmetadata.preview_path포함, 25초),upload-overview200.B03_FileInput/B03_FileInput_Router_Temp.py749 → 478줄 (_Router_Temp_Chunks.py294,_Router_Temp_Support.py46 = 조각 수·묶음 폴더·상태 갱신). 보조를 따로 뺀 이유는 본체·청크가 함께 써서 순환 임포트가 생기기 때문임. 검증: 라우트 10개(temp 9 + attach 1) 동일, 청크 흐름 실제 호출 — 묶음 생성 200 →upload-sessions200 →chunks200 →finalize200 → 삭제 200.B07_DesignDetail/B07_DesignDetail_Router_Support.py808 → 532줄 (_Support_Basin.py279 = 유역도 배경 GeoJSON·좌표 환산·도곽 클리핑,_Support_Io.py88 = 원본 JSON·매니페스트 입출력·측점 대응표).watershed_source·clip_line_to_box는 본체에서as로 재노출해 호출부 import 불변. 검증: 라우트 7개 동일,design-drawings200 ·frame-template200.config/config_system.py937 → 255줄 (config_system_terrain.py186 = 5·5-2장 지형·지표면,config_system_design.py520 = 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개 — 검증 대기)
동작 불변이 목표라 순수 이동만 함(로직·이름·기능 변경 없음). 진입 파일은 같은 이름·같은 공개 심볼을 유지하고, 잘라낸 조각을 진입 파일이 불러 붙임.
B05_Profile/B05_Profile_UI_Style.css1379 → 592줄 (_Style_Table.css515 ·_Style_Drainage.css289). 진입 TS 두 곳 (B05_Profile_UI_Page.ts·A00_Common/b_structures_section.ts)에서 본체 다음에 순서대로 불러 캐스케이드 유지. 검증: 종단 패널 캡처가 분리 전과 바이트 단위 동일(md5ee6bc8b52adb), 계산 스타일 실측(표 이름표 sticky 78px · 편집 버튼 21×17 · 줌 22×22 · 배수유역 flex).B04_PreProcess/B04_PreProcess_UI_Style.css870 → 565줄 (_Style_Map.css312). 검증: 두 파일을 다시 이으면 원본과 경계 빈 줄 1개 외 완전 동일, B04 화면 실측 (.b04-mapflex column gap 12px · 896×828, 좌측 폼 gap 16px, 3D·2D 렌더 정상).B04_PreProcess/B04_PreProcess_Router.py718 → 493줄 (_Router_Status.py221 = 상태 조회·모델 프리뷰,_Router_Progress.py47 = progress.json 헬퍼). 상태 라우터는 prefix 없이 만들고 본체가include_router로 붙임(중복 prefix 사고 1건 잡음). 진행률 헬퍼를 별도 모듈로 뺀 이유는 본체·상태 라우터가 함께 써 순환 임포트가 생겨서임.write_surface_progress는 본체에서 계속 재노출(B03 서비스가 참조). 검증: 경로 9개 분리 전과 동일, 백엔드 재시작 후/surface/status200(진행률 100·모델 3),/surface/models200,/surface/models/415/preview200model/gltf-binary7,946,756B.B04_PreProcess/B04_PreProcess_Router_Watershed.py714 → 518줄 (_Router_Watershed_Output.py225 =.npz·스테이지 기하 쓰기와 응답 좌표 변환 헬퍼). 공개 심볼router·get_primary_region·CONTOUR_FILE·STREAM_FILE유지. 검증: 경로 2개 유지,/drainage/rainfall200(관측소 영양군 도곡리),/drainage/primary-region200(schema_version 3 · upstream_lines 포함), B05 화면 유역 11개·측점 66개 정상, 옮긴 순수 헬퍼 6개 직접 호출 스모크 통과. 단 분석 재실행(쓰기 경로)은 돌리지 않음 — 30초 재계산이 작업본 산출물을 덮어써서, 순수 이동임을 텍스트 대조·임포트로 확인하는 데 그침.- 공통:
ruff check전체 통과·ruff format적용,tsc --noEmit통과,tmp/tests183 passed.
2026-09-04 2차 분리분 (laptop-main 담당 4개 — 검증 대기)
ui_template/ui_template_elements.ts917 → 363줄 (_styles.ts369 =injectBaseStyles()규칙 문자열 ·_chart.ts185 = 공통 라인 차트 ·_base.ts33 = 요소 생성 헬퍼el, 셋이 함께 써 순환 방지). 본체가export *로 재노출. 검증: 분리 전export25개 유지(+el공개 추가),tsc --noEmit통과.B03_FileInput/B03_FileInput_UI_Page.ts925 → 692줄 (_Page_Flow.ts262 = 중단 세션 이어올리기·보관함 이관·청크 업로드·재잠금·서비스워커,_Page_Rules.ts107 = 필수 카드·파일 적합성·업로드 가능 판정·서버 파일의 카드 매핑). 화면 상태는UploadFlowContext창구로만 넘기고, 규칙은 상태를 가두지 않는 순수 함수로 둠. 검증: 새 프로젝트를 만들어 노선 5종을 실제로 골라 업로드 — 카드 5장 선택 시 [파일 업로드] 비활성, [LAS 없이 설계] 켜면 활성(판정 규칙 정상), 업로드 후 4장 완료(20초).common_util/common_util_cross_design.ts728 → 405줄 (_geometry.ts333 =SectionGeometry·행진 상수·sideRole·ResolvedGroup). 파이썬 짝(B06_Section_Engine_Design.py)은 손대지 않아 미러 관계 유지. 검증: B06 횡단 카드 실측과 서버 계산값 대조 — 측점 0 절토 화면 2.50㎡ / 서버 2.4985㎡, 성토 1.85㎡ / 1.8521㎡ 일치(카드 273장). 미러 테스트는 laptop-sub 폴더에서 10 passed.B07_DesignDetail/B07_DesignDetail_UI_Page.ts732 → 517줄 (_UI_Panels.ts234 = 도면 목록 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개 — 검증 대기)
-
B05_Profile/B05_Profile_UI_Profile_Panel.ts726 → 688줄 (_Profile_Panel_Types.ts52 = 콜백 타입). 진입 파일이 다시export해 옛 임포트 경로 유지. 검증: 종단 패널 측점 66개·표 12행·줌 7개·유역 11개 정상, 방향키 862.99→863.09m,Ctrl+Z복귀. -
B04_PreProcess/B04_PreProcess_UI_TerrainViewer.ts958 → 698줄 (_Chrome.ts209 = DOM 뼈대,_Contours.ts189 = 등고선 적재). 검증: 뷰어 2개 렌더, 등고 라벨 40개(상한), 범례 940/760m, 토글 끄면 0 → 켜면 40, 간격 5m 적용·1m 복귀 정상. -
B05_Profile/B05_Profile_UI_Structures_Panel.ts1024 → 669줄 (_Types.ts94 ·_Commit.ts312 = 폼 왕복·저장 ·_Events.ts146 = 입력 배선). 보류였던 항목(2026-09-03 「B」)을 2026-09-04 사용자 지시로 착수. 저장 동작에 닿는commit()·폼 로드가 조각으로 갔으므로 시험 프로젝트에서 실제 조작으로 확인함: C 사면안정/옹벽을 기준측점 5+0 에 [추가] → 목록 반영, [저장] → 서버 정본 2건(revision 0→1), 새로고침 뒤 [삭제] → [저장] → 서버 0건(revision 4). 시험 프로젝트는 원상 복구(구조물 0건).- 곁가지로 확인된 기존 동작(이번 분리와 무관): 방금 [추가]해 아직 저장 전인 항목은
structure_id가 없어 [삭제]가 듣지 않음. 저장 뒤에는 정상 삭제됨. 분리 전과 같은 분기라 이번 변경 탓이 아니며, 고칠지는 사용자 판단 사항으로 남김.
- 곁가지로 확인된 기존 동작(이번 분리와 무관): 방금 [추가]해 아직 저장 전인 항목은
-
회귀 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/tests183 passed(미러 테스트test_b06_cross_design_mirror.py10 passed 포함). -
보류였던 두 덩어리 해소(2026-09-04) —
commit()과 옵션 필드 렌더·시설 폼 로드는_Commit.ts로 옮겼고, [추가]·[삭제]·[저장] 실동작으로 확인함(위 2차 분리분 기록 참조). 파일은 669줄로 제한 이내.