Files
Aislo/docs/raw/plans/2026-09-04_plan_700line_split.md
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

12 KiB
Raw Permalink Blame History

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.py 872 → 306줄 (_Router_Chunks.py 389 = 세션·조각·마무리·진행 조회, _Router_Helpers.py 267 = 필수 파일 판정·중복 지문 판별·단계 기록·알림). 검증: 라우트 7개 경로·메서드 분리 전과 동일, 공용 브라우저에서 노선 5종 실제 업로드 성공(shp metadata.preview_path 포함, 25초), upload-overview 200.
  • 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.
  • 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.
  • 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개 — 검증 대기)

동작 불변이 목표라 순수 이동만 함(로직·이름·기능 변경 없음). 진입 파일은 같은 이름·같은 공개 심볼을 유지하고, 잘라낸 조각을 진입 파일이 불러 붙임.

  • 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).
  • 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 렌더 정상).
  • 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.
  • 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개 — 검증 대기)

  • 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 통과.
  • B03_FileInput/B03_FileInput_UI_Page.ts 925 → 692줄 (_Page_Flow.ts 262 = 중단 세션 이어올리기·보관함 이관·청크 업로드·재잠금·서비스워커, _Page_Rules.ts 107 = 필수 카드·파일 적합성·업로드 가능 판정·서버 파일의 카드 매핑). 화면 상태는 UploadFlowContext 창구로만 넘기고, 규칙은 상태를 가두지 않는 순수 함수로 둠. 검증: 새 프로젝트를 만들어 노선 5종을 실제로 골라 업로드 — 카드 5장 선택 시 [파일 업로드] 비활성, [LAS 없이 설계] 켜면 활성(판정 규칙 정상), 업로드 후 4장 완료(20초).
  • 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.
  • 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개 — 검증 대기)

  • 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 복귀.

  • B04_PreProcess/B04_PreProcess_UI_TerrainViewer.ts 958 → 698줄 (_Chrome.ts 209 = DOM 뼈대, _Contours.ts 189 = 등고선 적재). 검증: 뷰어 2개 렌더, 등고 라벨 40개(상한), 범례 940/760m, 토글 끄면 0 → 켜면 40, 간격 5m 적용·1m 복귀 정상.

  • 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 가 없어 [삭제]가 듣지 않음. 저장 뒤에는 정상 삭제됨. 분리 전과 같은 분기라 이번 변경 탓이 아니며, 고칠지는 사용자 판단 사항으로 남김.
  • 회귀 1건 확인·수정(2026-09-04, laptop-main 이 5df79d2d 로 수정) — 구조물 패널을 쪼갤 때 structures·optionInputs 를 컨텍스트에 참조로 넘겼는데 패널이 그 배열을 재할당(structures = next.map(...))해 조각이 옛 배열을 고치고 있었음. 증상은 「저장 전 [삭제] 무동작」. 두 배열을 const 로 두고 내용만 갈아끼우도록 고침.

    • 내 나머지 분리분 재점검 결과 같은 패턴 없음: _TerrainViewer_ContourslabelElementsconst + 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 포함).

  • 보류였던 두 덩어리 해소(2026-09-04) — commit() 과 옵션 필드 렌더·시설 폼 로드는 _Commit.ts 로 옮겼고, [추가]·[삭제]·[저장] 실동작으로 확인함(위 2차 분리분 기록 참조). 파일은 669줄로 제한 이내.