Commit Graph
5024 Commits
Author SHA1 Message Date
eomsangdon 812d969999 Merge remote-tracking branch 'origin/dev' into sub_laptop_3 2026-09-29 19:53:10 +09:00
eomsangdonandClaude Opus 5.5 77d3ffeee6 fix(B05): 초기노선 추천 갈래가 한 노선으로 모이던 흠 — 갈래마다 제 목표 비교값으로 고름 · 예상노선 추적 = 전처리 초기값(PLAN 23-1)
- 원인: 가파른 지형(옆경사 평균 67 %)에서 4 m 링크의 14 %뿐이 상한 안 · 반지름 규칙까지 지키는 길이 없어 풂(상한 29 %) · 풂 탐색 벌점(1 m 당 500 × 넘은 비율)이 목표(1 m 당 평균 1)를 덮어 네 갈래가 「넘은 기울기 합 최소」 한 길로 · 탐색 목표(4 m 링크)와 비교값(측점 20 m · 절성토)이 어긋나 벌점만 낮춰도 순서가 안 맞음 · follow 는 이격 최소 탐색이라 초기값과 다름
- 후보 묶음(목표 비중 셋 × 벌점 50 · 5 + 센 벌점 기준 길 · 엄격하면 비중마다 상한 단계)을 한 번 짜고 갈래는 비교값으로 고름 — 토공 최소 = 절성토 합 최소 · 기울기 순한 = 최대(같으면 평균) 최소 · 비중 = 이격 · 절성토 · 기울기를 후보 범위로 정규화한 가중합 · 기준 길보다 못 지킨 곳이 많은 후보는 뺌
- follow = build_planned_polyline(예상노선) — planned_route_initial.csv 와 같은 선(1078.01 m) · 넘은 곳은 「예상노선 추적」 사유로 목록
- 탐색을 B05_Profile_Engine_RouteInitial_Search.py 로 나눔 · 상태 그래프 한 번만 짜고 탐색마다 간선만 거름 · 막는 기울기 이분 탐색은 BFS · 후보 묶음은 같은 입력이면 프로세스 메모리에서 다시 씀
- initial_route 를 B05_Profile_Router_RouteInitial.py 로 나눔(Router_Replan 712 → 630줄, 같은 router 에 등록) · 없는 프로젝트 500 → 404
- 시험 test_route_initial 20(추종 = 초기값 · 갈래별 목적 순서 · 랩탑_보조 실데이터 갈래 차이)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019ACSGaHdLgnkEkoA4LDtMU
2026-09-29 19:51:50 +09:00
eomsangdon 77754ad5f0 Merge remote-tracking branch 'origin/sub_laptop_4' into sub_laptop_7 2026-09-29 19:40:53 +09:00
eomsangdon 3b00f19dc3 Merge remote-tracking branch 'origin/dev' into sub_laptop_7 2026-09-29 19:40:50 +09:00
eomsangdonandClaude Sonnet 5.5 399c3a11ea fix(B05): 노선 추천 — 알약 이름 「기울기 순한」 · 적용 알림 글 다듬음 · 도구 막대 구성 시험 추가 (PLAN 23-2)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019BVZd1M6WUf1YEy9gbAE1G
2026-09-29 19:40:43 +09:00
eomsangdonandClaude Sonnet 5.5 22eaed6509 fix(B05): 계획노선 편집 창 파란 반폭 선 길이를 「횡단 반폭」 적용값 양쪽으로 (PLAN 22-1)
- 횡단 미리보기 요청에 적용 반폭을 실어 보내고 서버가 덮은 반폭을 되돌려 줌
- 파란 선 좌·우 길이 = 그 반폭 (원지반 선 범위와 같은 값) · 적용한 적 없으면 서버 기본값
- 시험 test_b05_routeedit_cross_width.py 추가

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KmELpdXFDRZHhfbGuRhSmL
2026-09-29 19:35:02 +09:00
eomsangdon 998660c342 Merge remote-tracking branch 'origin/dev' into sub_laptop_5 2026-09-29 19:33:10 +09:00
eomsangdonandClaude Sonnet 5.5 90194b2849 feat(B05): 계획노선 편집 창 — 측점 라벨 · 호 고르기 판정 함수(22-2 · 22-3 1차)
- 측점 라벨 글자 상자를 그릴 때 기록(drawStationTicks 의 onLabel · B04 지도 · 배수유역도 동작 그대로)
- stationAtScreen 이 눈금 다음 라벨 상자를 봄 · 솎여 안 보이는 눈금은 안 잡음
- 곡선 호 점열(curveArcVertices)과 점-호 판정(arcAtScreen) 더함
- 시험 resources/tester/test_b05_routeedit_pick.py 8건
- RouteEdit.ts 배선은 sub6 나누기 뒤 새 파일에 잇는 다음 커밋

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EauA2ATmqNRbeV48s9CcBr
2026-09-29 19:32:57 +09:00
eomsangdon e7ee049548 Merge remote-tracking branch 'origin/dev' into sub_laptop_7 2026-09-29 19:28:34 +09:00
eomsangdonandClaude Sonnet 5.5 074d9aec13 feat(B05): 계획노선 편집 창 — [노선 추천] 모달(알약 넷 · 미리 보기 지도 · 비중 · 제약 칸) · 초기화 = 전처리 초기값 노선 · 연 상태로 단추 뺌 (PLAN 23-2)
- 도구 막대: 추천 묶음을 빼고 「1m 등고선」 왼쪽에 구분선 + [노선 추천] 하나 · 「연 상태로」 뺌 · 「현재 추천: ○○」 표시
- 모달(_Recommend): 알약 넷(예상노선 추적 기본) · 비중 슬라이더 · 제약 칸 · 미리 보기 지도 · 비교값 · 못 지킨 구간 · [적용] · [닫기]
- [초기화]: 재계산 없이 GET /route/plan 의 initial_route(전처리 초기값 노선)를 놓음
- 서버: GET /route/plan 에 initial_route(노드 · 곡선) 추가
- 시험: 헬퍼 · 왕복 시험 갱신(추적 표기 · initial_route · 지도 선)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019BVZd1M6WUf1YEy9gbAE1G
2026-09-29 19:28:20 +09:00
eomsangdonandClaude Opus 5.5 5b41cfaf01 refactor(B05): 계획노선 편집 창 누르기 · 끌기 · 놓기를 _RouteEdit_Pointer.ts 로 떼어냄(697 → 529줄 · 동작 그대로)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BU9gbNE3aWFUvE61pS2WGt
2026-09-29 19:20:52 +09:00
eomsangdonandClaude Sonnet 5.5 eb387d5f84 feat(B05·B06): 「구조물 옵션 보이기」에서 끈 옵션을 배수관 · BOX암거 · 세월교 · 기슭막이 하위 폼에서도 가림(21-10 흠 8)
- 시설 폼 칸에 옵션 키 표식(data-option-keys) · 끈 키의 칸은 가림 · 칸이 다 가려진 줄은 줄째
- 키가 여럿인 칸(본체 규격 · 유입구 구조)은 키가 다 꺼졌을 때만 가림 · 독립 기슭막이는 유입 · 유출 채널 키로 넓힘
- 숨긴 칸은 칸 값(제안값 채우기 포함)이 아니라 폼이 받은 옛 값을 저장에 그대로 실음 · 이 폼에는 필수 검사가 없음
- 가리기 코드는 새 파일(_Facility_Hidden)로 분리해 Facility.ts 700줄 아래 유지
- 시험 3개 추가

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TULoa94ZFL26KU6ZqVpjkF
2026-09-29 14:20:06 +09:00
eomsangdon 8cd4a78efc Merge remote-tracking branches 'origin/sub_laptop_1', 'origin/sub_laptop_2', 'origin/sub_laptop_3' and 'origin/sub_laptop_4' into main_laptop_1 2026-09-29 13:45:24 +09:00
eomsangdonandClaude Sonnet 5.5 5f43ef8541 fix(B05·B06): 집계 항목 지정이 폼 검증에 막혀 초안에 안 들어가던 흠 · 저장 전 B05→B06→B05 에서 관 지정이 옛값으로 돌아가던 흠(21-10 흠 2·3)
- 흠 2 고치는 구조물의 집계 항목 지정 · 해제는 필수 옵션 · 측점 검증을 거치지 않고 기록에 바로 반영(commitSummaryOnly) · 관 · 새 항목은 종전 흐름
- 흠 3 배수유역 화면이 들어올 때 세션 초안 관 목록이 있으면 그것으로 세움(초안이 없으면 종전대로 정본)
- 시험 2개 추가(집계 항목 전용 반영 · 초안 우선 진입)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TULoa94ZFL26KU6ZqVpjkF
2026-09-29 13:44:39 +09:00
eomsangdonandClaude Sonnet 5.5 5b04f453a6 fix(ui_template): 나무 화살표 · 줄 수 글자 대비 · 항목 고르기 툴팁 · 자리표 이름 (PLAN 21-10 흠 5~7)
- 나무 화살표 · 줄 수와 항목 고르기의 흐린 글을 var(--color-text-secondary) 로 — 밝은 테마 대비 3.08 → 6.3 이상
- M01 왼쪽 목록 줄 수도 같은 공용 클래스(ui-tree__count)로 — 밝은 테마 2.64 → 5.41
- 항목 고르기: 잎 툴팁 = 층 이름 + 키 · 「새 분류N」 자리표는 이름 · 나무 이름에서 뺌 · 관리 화면 단추는 개인 항목만(확인)
- ghost 단추는 두 테마 모두 6.85 이상이라 색 변경 없음 — 다크 1.06 은 ORCA 탭이 색 전환을 멈춰 생긴 측정값
- 자료 시험에 자리표 · 툴팁 추가

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K7JS47SacjPxZ718QsZKyr
2026-09-29 13:36:36 +09:00
eomsangdonandClaude Sonnet 5.5 22f3df9476 fix(M02): 빈 층에서 첫 열 만들기 · 읽기만 표의 편집 단추 모두 숨김 (PLAN 21-10 흠 1 · 4)
- 표 부품 — 열 0 이면 [열 더하기] 가 켜져 첫 열을 만들고 머리 글 고치기를 바로 엶(종류/분류 는 / 로 이음)
- 표 부품 `readOnly` — 단추 줄 · 안내 글 숨김 · 칸 · 머리 · 층 이름 고치기 · 열 너비 끌기 · Delete 막음 · M02 가 읽기만일 때 넘김
- 시험 test_m02_layer_screen.py 7(첫 열 Node 실행 · 읽기만 자리)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Kyw9qnkJ94pC1A4PfpDtA
2026-09-29 13:36:35 +09:00
eomsangdonandClaude Sonnet 5.5 90e478fe0b fix(M02): 자재 조합 이름 오류 글 — 파일명 · 키 없이 쉬운 말 한 줄 (PLAN 21-10 흠 7 서버)
- 같은 이름 · 60자 넘는 이름을 틀 검사 앞에서 「이름」 한 줄로 막음
- 오류 글에 이름은 30자에서 자름(…)
- 시험: 겹침 글 · 긴 이름 자름 · 60자 넘음

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EUypcnp5d1gU2aeKh9F2H7
2026-09-29 13:31:59 +09:00
eomsangdon 5cb65dff16 Merge remote-tracking branch 'origin/sub_laptop_7' into sub_laptop_1
충돌 셋(UI_Side · UI_Style · locale_m2)은 자리만 다른 같은 내용 — 이미 받은 배치를 취해 한 벌로 풂(중복 없음).
2026-09-29 12:39:21 +09:00
eomsangdon 64e0759a25 Merge remote-tracking branch 'origin/sub_laptop_2' into sub_laptop_1
충돌 셋(UI_Side · UI_Style · locale_m2)은 같은 내용의 자리만 다름 — sub_laptop_2 의 배치를 취해 한 벌로 풂(중복 없음 · 항목 고르기 문구 그대로).
2026-09-29 12:38:51 +09:00
eomsangdon 9f22a6b467 Merge remote-tracking branch 'origin/sub_laptop_4' into sub_laptop_1
충돌 하나(UI_Side)는 sub_laptop_4 의 층별 구성(옵션 보이기 · 도면 양식은 시스템 층에만)을 취해 풂.
2026-09-29 12:34:44 +09:00
eomsangdon 78dc1075b6 Merge remote-tracking branch 'origin/sub_laptop_3' into sub_laptop_1 2026-09-29 12:34:06 +09:00
eomsangdonandClaude Sonnet 5.5 10cc5dd373 feat(ui_template): 항목 고르기를 실서버에 이음 — 가짜 응답 지움 (PLAN 21-9)
- GET /api/m02/items?all=1 = [{layer, owner, items}] 를 줄마다 layer · owner 를 붙여 폄 · 404 갈래와 ui_template_item_picker_fake.ts 지움
- 보이는 항목 이름 = 종류 + 분류1~3 (열은 집계표 열 id) · summary_item.name 도 같은 이름
- 폴더 줄은 서버 names{일위대가 · 자재조합 · 도번 · 면적번 · 재료번} 이름을 보임(키는 툴팁) · 이름이 없으면 키를 작은 글로
- 복사 응답 {key} 의 개인 항목을 바로 고름
- 자료 시험을 서버 줄 모양으로 다시 씀

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K7JS47SacjPxZ718QsZKyr
2026-09-29 12:33:55 +09:00
eomsangdonandClaude Opus 5.5 e65592a76d feat(M02): 항목 목록 줄마다 names(일위대가 · 자재조합 · 도번 · 면적번 · 재료번 화면 이름) (PLAN 21-9)
- GET /api/m02/items 줄에 names — 키 대신 보일 이름 · 없으면 null
- 개인 복사 응답 {key} = 새 SS 키 확인 시험
- 결정 기록: 일위대가 갈라 내기 SYSTEM_ADMIN 만 · 첫 진입 뒤 같은 이름 409 그대로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EUypcnp5d1gU2aeKh9F2H7
2026-09-29 12:32:37 +09:00
eomsangdonandClaude Sonnet 5.5 1973eba8b2 feat(B05): 숨긴 옵션은 필수 아님 — 저장 검증이 M02 옵션 보이기 표를 봄 · 시험 한 건
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L6KXAabDTenEU7hrDQmCKY
2026-09-29 12:32:24 +09:00
eomsangdonandClaude Sonnet 5.5 4e0fd3106d feat(B05·B06): 집계 항목 고르기를 공용 모달(21-5)로 이음 · 임시 모달 삭제(21-9)
- 임시 Summary_Picker 삭제 · Panel 은 @ui/ui_template_item_picker 의 openItemPicker({current, canCopy}) 결과(apply · clear · cancel)로 처리
- 임시 모달 전용 CSS 삭제
- origin/dev 되받기 충돌 둘(List · Panel_Types) 양쪽 살려 풂 · 쓰지 않는 import 하나 정리

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TULoa94ZFL26KU6ZqVpjkF
2026-09-29 12:31:31 +09:00
eomsangdon eb3ede5350 Merge remote-tracking branch 'origin/sub_laptop_3' into sub_laptop_1
충돌 둘(Structures_List · Panel_Types)은 양쪽을 모두 살려 풂 — 측점 글은 공용 stationLabel · 집계 항목 읽기 · isB05Option · SummaryItem 을 한 벌로, 쓰지 않게 된 isB05Option 가져오기는 뺌.
2026-09-29 12:29:53 +09:00
eomsangdon f94d7c13a4 Merge remote-tracking branch 'origin/sub_laptop_3' into sub_laptop_7
# Conflicts:
#	B05_Profile/B05_Profile_UI_Structures_List.ts
#	B05_Profile/B05_Profile_UI_Structures_Panel_Types.ts
2026-09-29 12:29:41 +09:00
eomsangdon 35dbc4254f Merge remote-tracking branch 'origin/sub_laptop_3' into sub_laptop_4
# Conflicts:
#	B05_Profile/B05_Profile_UI_Structures_List.ts
#	B05_Profile/B05_Profile_UI_Structures_Panel_Types.ts
2026-09-29 12:29:37 +09:00
eomsangdonandClaude Sonnet 5.5 9aa07fda75 Merge remote-tracking branch 'origin/dev' into sub_laptop_2
충돌 풂 — 양쪽 다 살림: M02 좌측(층 인식 도면 양식 + 구조물 옵션 보이기는 시스템 층만) · 스타일 · 사전(층 화면 + 항목 고르기) · B05 목록·패널 타입(공용 측점 표기 + 집계 항목 import)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Kyw9qnkJ94pC1A4PfpDtA
2026-09-29 12:29:29 +09:00
eomsangdon 6c4b059837 Merge remote-tracking branch 'origin/dev' into sub_laptop_3
# Conflicts:
#	B05_Profile/B05_Profile_UI_Structures_List.ts
#	B05_Profile/B05_Profile_UI_Structures_Panel_Types.ts
2026-09-29 12:29:02 +09:00
eomsangdon 2be64ab732 Merge remote-tracking branch 'origin/sub_laptop_7' into sub_laptop_3 2026-09-29 12:28:30 +09:00
eomsangdon 03b8ef42ce Merge remote-tracking branch 'origin/sub_laptop_5' into sub_laptop_3 2026-09-29 12:28:28 +09:00
eomsangdon 6837feaa2a Merge remote-tracking branch 'origin/sub_laptop_1' into sub_laptop_3 2026-09-29 12:28:24 +09:00
eomsangdon a1bae17e4d Merge remote-tracking branch 'origin/sub_laptop_2' into sub_laptop_1
충돌 셋(UI_Side · UI_Style · locale_m2)은 양쪽을 모두 살려 풂 — 옵션 보이기 · 항목 고르기 문구 · 층 화면 문구를 한 벌로, 도면 양식 줄은 시스템 층에서만.
2026-09-29 12:28:14 +09:00
eomsangdon 1a0ba6c6dc Merge remote-tracking branch 'origin/sub_laptop_2' into sub_laptop_4
# Conflicts:
#	M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts
#	M02_MasterTemplete/M02_MasterTemplete_UI_Style.css
#	ui_template/ui_template_locale_m2.ts
2026-09-29 12:28:06 +09:00
eomsangdon cc6889e4f3 Merge remote-tracking branch 'origin/sub_laptop_2' into sub_laptop_7
# Conflicts:
#	M02_MasterTemplete/M02_MasterTemplete_UI_Side.ts
#	M02_MasterTemplete/M02_MasterTemplete_UI_Style.css
#	ui_template/ui_template_locale_m2.ts
2026-09-29 12:27:37 +09:00
eomsangdon 4a25b99f88 Merge remote-tracking branch 'origin/sub_laptop_5' into sub_laptop_2 2026-09-29 12:27:01 +09:00
eomsangdon 0941a02eb4 Merge remote-tracking branch 'origin/sub_laptop_3' into sub_laptop_2 2026-09-29 12:26:59 +09:00
eomsangdonandClaude Sonnet 5.5 71fac35dab feat(B05·B06): 구조물 좌측 패널 「집계 항목」 줄 · 옵션 보이기 · [수정] 옵션 보존 · 목록 지정 색(21-4)
- 폼 옵션 아래 「집계 항목」 줄(이름 · 미지정 · [고르기] · [해제]) — 구조물 · 관 계열 하위 폼 · B05 · B06 한 코드
- 옵션 `visible:false` 는 폼에서 숨김(정의 · 옛 값 그대로) · [수정]은 폼이 그린 칸만 갈아 끼우고 안 그린 칸(상세 · 숨긴 칸) 보존 — 옵션 덮어쓰기 흠 고침
- 목록 줄 `.is-assigned` 색 · 툴팁 항목 이름 · 캐시는 지금 초안 기록 칸(structures · pipes) 안 summary_item
- 미지정이면 칸을 안 실음 · 관은 서버 응답에 칸이 없으면 같은 측점에서 화면이 이어받음
- 항목 고르기 모달은 21-5 가 오기 전까지 같은 이름의 임시 함수 · Structures_Panel 700줄 넘어 옵션 그리기를 Panel_Options 로 나눔

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TULoa94ZFL26KU6ZqVpjkF
2026-09-29 12:19:31 +09:00
eomsangdonandClaude Sonnet 5.5 154d693599 feat(M02): 구조물 관리 화면 — 층 인자(개인 · 회사) · 층별 권한 · 대시보드 카드
- 주소 `?layer=personal|company`(없으면 시스템) — 라우터가 인자를 떼고 `currentQuery` 로 읽음 · 층 고정 풂
- 층 길 접두어 `/layers/{층}` — 구조물집계표 · 조합 · 복사 호출이 화면 층을 따름(시스템은 옛 길 그대로)
- 제목 셋(마스터 템플릿 · 구조물 관리(회사) · 구조물 관리(개인)) · 돌아가기 층 무관 · 도면 양식은 시스템 층만
- 편집 권한 — 시스템 SYSTEM_ADMIN · 회사 ADMIN 또는 is_master · 개인 본인 · 읽기만이면 단추 숨김 + [개인용으로 복사]
- 회사 없음 → 「회사부터 등록」 안내 · 대시보드 카드 「구조물 관리」(USER 개인용 · ADMIN · SYSTEM_ADMIN 회사용 + 개인용)
- 시험 test_m02_layer_screen.py 5 · test_m02_structure_panel.py 갱신

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Kyw9qnkJ94pC1A4PfpDtA
2026-09-29 12:09:31 +09:00
eomsangdon 2d1719039e Merge remote-tracking branches 'origin/sub_laptop_1', 'origin/sub_laptop_5' and 'origin/sub_laptop_7' into sub_laptop_4 2026-09-29 12:01:36 +09:00
eomsangdon b5eea31357 Merge remote-tracking branch 'origin/dev' into sub_laptop_4 2026-09-29 12:01:34 +09:00
eomsangdonandClaude Opus 5.5 b8195aff2e feat(M02): 층 인식 집계표 저장소 — 회사 · 개인 층 · 항목 목록 · 항목 복사 (PLAN 21-2)
- Store · Matset · Branch 가 지금 층 폴더(store.at · 기본 시스템 층)를 봄 — 시스템 층 동작 · 옛 길 그대로
- 회사 · 개인 층 첫 진입 때 빈 뼈대(집계표 열 0 · 조합 장부 다음 1 · 자재 조합 빈 표)
- /api/m02/layers/{layer}/… 집계표 길(번호 · 조합 장부 · 구조물 새로 · 복사 · 조합 갈라 내기 · 자재 조합) · 권한 = 시스템 SYSTEM_ADMIN · 회사 관리자 · 개인 본인
- 층 양식 저장(시스템 · 회사 · 개인)은 집계표 규칙(새 열 파일 · 번호 · SS) 거침 · 시스템 층 쓰기는 SYSTEM_ADMIN · 쓰는 양식 지우기 409
- GET /api/m02/items(한 층 · ?all=1 세 층) · POST /api/m02/layers/personal/items/copy · 회사 없음 409 「회사부터 등록」
- 시험 test_m02_layers_store

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EUypcnp5d1gU2aeKh9F2H7
2026-09-29 12:01:08 +09:00
eomsangdonandClaude Opus 5.5 5892232890 feat(B05·M02): 구조물 집계 항목 칸 · 저장 스냅샷 · 지정 항목 채움 (PLAN 21-3)
- summary_item 칸: StructureInstance · pipe_points 점 기록(options 밖) — 모양 검사 한 벌 common_util_summary_item(층 system·company·personal · owner null·{회사}·{회사}/{사용자} · key SS+6자리 · name) · 없으면 null(옛 파일 호환) · 관 요청 모양 틀림 400
- 저장 스냅샷 M02_Item_Snapshot: PUT /route/structures · PUT /drainage/pipe-points 뒤 지정 항목마다 templates/items/{layer}_{owner}_{key}/ 에 집계(SS 줄 + 열 정의) · 도면 · 면적 · 재료 · 자재조합 · 일위대가(UA 줄 + 담은 로직 줄) · manifest(원본 · 판 · 적용일 · 쓰는 구조물) — 있는 폴더는 다시 안 씀(원본이 바뀌어도 프로젝트 값 그대로) · 안 쓰는 폴더 지움 · 실패해도 저장 유지
- 채움 fill_table = 지정 항목 모드: 구조물이 고른 열(묶음)에만 · 미지정 · 복사본 없음은 안 셈 + 알림 · 스냅샷 열 정의 사용 · 회사 · 개인 항목은 열id@폴더 새 열 · 자동 맞춤은 fill_document 기본으로만 남음
- 관 시설 되붙이기가 summary_item 도 옮김
- [초기화]는 templates/ 를 안 건드림 · 복제 도구는 폴더 통째 복사 — 손댈 것 없음(시험으로 지킴)
- 시험: test_structures_summary_snapshot 17 · 옛 채움 시험은 자동 맞춤 길(fill_document)로 · 층 라우트 채움 시험은 새 규칙(미지정 관 = 줄 없음)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RrQ65VtGZbae2VKgYVMhmc
2026-09-29 12:00:44 +09:00
eomsangdonandClaude Sonnet 5.5 927e85d110 feat(ui_template): 항목 고르기 모달 · 공용 나무 보기 — PLAN 21-5
- ui_template_tree: M01 renderTree 를 공용으로 올림(M01 은 같은 이름으로 그대로 부름) · 기본 줄 createTreeRow · 클래스 ui-tree__*
- ui_template_item_picker: openItemPicker({current, canCopy}) → apply(summary_item) | clear | cancel · 왼쪽 마스터 · 회사 · 개인 → 종류 → 분류1 → 항목 나무 + 찾기 · 오른쪽 폴더 모양(키는 툴팁) · 개인용으로 복사 · 관리 화면 이동
- 목록 GET /api/m02/items?all=1 · 복사 POST /api/m02/layers/personal/items/copy — 서버가 없으면(404) 21-1 모양 가짜 응답
- 자료 쪽(나무 · 찾기 · 폴더 줄)은 화면 없는 모듈로 나눠 시험

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K7JS47SacjPxZ718QsZKyr
2026-09-29 12:00:13 +09:00
eomsangdonandClaude Sonnet 5.5 51b380b64d feat(M02): 구조물 옵션 보이기 — 종류마다 B05/B06 폼에 보일 옵션 체크 · 표 · 서버 길 · 좌측 줄 · 화면
- 표 resources/master_template/구조물옵션표시.json(숨김만 저장 · 없으면 모두 보임)
- GET /api/projects/structure-types 옵션마다 visible · GET/PUT /api/m02/structure-options
- M02 좌측 「구조물 옵션 보이기」 줄 → 메인 종류(군별) → 옵션 체크 · [저장] · [모두 보임]

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L6KXAabDTenEU7hrDQmCKY
2026-09-29 11:57:27 +09:00
eomsangdon b3764299a3 Merge remote-tracking branch 'origin/dev' into sub_laptop_6 2026-09-29 11:54:58 +09:00
eomsangdonandClaude Opus 5.5 08e493f132 feat(B05·B06·B07): 소수 측점 횡단 — 관 · 구조물 자리마다 따로 · 이름 소수 2자리 · 화면 표기만 정수
PLAN 20장 소수 측점 횡단(sub6). 사용자 확정: 관 · 구조물이 놓인 소수 측점(예 119.8)에 그 자리 횡단을
따로 둠 · 백엔드 · 파일 · 저장값은 소수 그대로 · 화면 표기만 「측점 + 거리」의 거리를 정수로(5+20).
- 이름 규칙 한 벌(B05_Profile_Engine_Sections): cross_key · cross_filename · parse_cross_key ·
  CROSS_KEY_PATTERN — 정수 m 는 옛 이름 그대로(cross_00120m) · 소수 측점은 cross_00119.80m.
  find_cross_file = 읽기용(새 이름이 없으면 옛 정수 m 이름) · prune_stale_cross_files 도 이것으로
  가려 옛 프로젝트의 정수 이름 파일을 지우지 않음
- generate_sections: 정수 m 격자 붙임을 풂 — 같은 이름이 되는 0.005m 안 겹침만 하나로
- B06: 찾기 · 패치 입력(Router_Design 둘) · 샘플 넓힘(SampleExtend)이 find_cross_file ·
  DB 설계 찾기 · 병합(get_cross_section_design · merge_…_by_round)은 ROUND(chainage_m)=정수 →
  0.005m 안 매칭
- B07: 도면 id · 장 id(cross_{key}m · cross_s{key}m) 정규식 · 측점 키(cross_station — 정수는 int
  그대로라 옛 id · 수량표 키 안 바뀜) · 측점은 파일 속 값으로(옛 정수 이름 파일도) · 횡단 파일 찾기
- 화면 표기 한 벌 common_util/common_util_station.ts(stationLabel · stationPartsLabel · 순수 함수) —
  common_util_svg 가 다시 내보내고 B05 formatStation 을 대신함(B05 목록 · 표시 · 폼 범위 · 계획노선
  편집 · 비정규 측점 라벨 · B06 카드 · 종단 · 유토) · 입력 칸 · 저장값은 소수 그대로
- B05_Profile_UI_Structures_Panel 700줄 → 690(순수 도우미 셋을 Panel_Types 로)
- M02_Table_Fill 관연장 찾기는 이미 측점 값(정확 먼저 · 0.5m 안)이라 그대로
시험: test_b05_station_roundtrip(표기 5+20 · 옛 정수 이름 찾기 · 안 지움 · 119.8 과 120 따로) ·
test_b05_extra_stations_supplier(새 규칙) · test_b06_patch_station(119.8 한 건) ·
test_b05_b06_save_roundtrip(보낸 관 측점마다 소수 이름 횡단 파일 있음) 등 고친 대상 108 통과 ·
test_b05_station_merge 통과 · 타입검사 통과.
ORCA(IP 5181 · 사본 프로젝트 sub6_검증 — 끝나고 DB 행 · 폴더 지움 · 원본 안 씀): 노출형 횡단수로를
5+19.8 에 놓고 저장 → structures.json 119.8 · 종단 측점 119.8(irregular) + 120 · 파일
cross_00119.80m.json 과 cross_00120m.json · B05 목록 「5+20」 · B06 카드 「5+20 · 119.8m」 열림.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VVM3xZ1aUPcUTuW2WZSnwg
2026-09-29 11:54:51 +09:00
eomsangdon b7449f857c Merge remote-tracking branch 'origin/dev' into sub_laptop_2 2026-09-29 11:51:31 +09:00
eomsangdonandClaude Sonnet 5.5 41c975c7bf chore(plan): 계획서 이관 문서를 이 브랜치에도 추적 — dev 와 같은 내용(받기 막힘 해소)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019Kyw9qnkJ94pC1A4PfpDtA
2026-09-29 11:51:25 +09:00