Commit Graph
699 Commits
Author SHA1 Message Date
eomsangdonandClaude Sonnet 5 e937978116 feat(M01): PLAN 7-5 — 안 쓰는 마스터 old/ 로 마저 옮기고 죽은 코드 셋 끊음
- 아무도 안 읽는 최상위·ref 파일 7개를 old/ 로(지우지 않음) — _원문목록·_열목록_화면표·
  수량_돌쌓기찰라이브러리_소광리·공종_수량연결_실무·수량_구조물원단위_울진·
  품셈_산림_재료할증_울진·품셈_산림_돌종류계수_울진(뒤 넷은 old_code 만 읽어 이제 0)
- 공종_자원별칭_실무도 old/ 로 — common_util_aliases.py 를 읽던 시험 둘이 이미 깨져 있어(
  B08·B09 모듈 없음) 실제로 부르는 살아 있는 코드가 없었음
- 살아 있는 common_util/ 에서 dead 모듈 셋(work_item_key·work_item_link·aliases)을
  old_code/common_util/ 로 옮김 — old_code 만 부르던 것이라 옮겨도 부르는 자리 그대로(
  old_code 는 old_code 를 스스로 루트로 읽는 관례) · 상대경로 계산만 한 단 보정
- 깨져 있던 시험 둘(test_b09_fuel_kind_vibrator·test_b08_root_removal_excavator)도
  resources/tester/ 에서 old_code/resources/tester/ 로 — 7-3 이 놓친 것 마저 정리
- UnitPrice.py 의 load_basis_missing() — old/ 스냅샷 대신 새 최상위 마스터
  `기준수량없음_산림품셈_2026-01-01.json` 으로(브레인 판정: 마스터 쪽) · old_code 로
  옮겨진 뒤 root 계산이 한 단 부족해 조용히 빈 딕셔너리를 돌려주던 것도 같이 바로잡음
  (79건 견본 대조 통과) · check_master.py 틀 검사에 특수 파일 면제 한 줄 추가
- 검증 — typecheck · check_master 틀 0건 · M01·자재품목 시험 215 + masterdata·m01_api 98 통과 ·
  전체 모으기 1475 그대로

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-22 14:35:46 +09:00
eomsangdon 04784a808a Merge remote-tracking branch 'origin/dev' into sub_laptop_3 2026-09-22 14:14:36 +09:00
eomsangdonandClaude Sonnet 5 ada55c2b68 feat(M01): PLAN 7-4b 뒤 절반 ④⑤ — 재료_품셈재료.json 을 old/ 로 옮김(MP 직접참조 다 걷음)
되돌렸던 옮기기를 마무리. 앞서 놓친 자리 — 호표 「요소」 칸만 훑어서 덧줄·수량
식 안에 그대로 박힌 MP 참조 16곳(집수정 뚜껑·철망태·쉬즈관·IV전선·백열등·
바퀴숫돌 넷·버너·노즐·테르밋용재·몰드·골무·퓨즈·용접봉)을 못 봤음 — 자재품목에
새 줄 일곱(값 미확보) · 기존 줄 셋(백열등·망태석·용접봉, 가장 맞는 것으로 이음)에
연결하고 식 안의 MP 키 문자열을 그 자재품목 키로 바로 바꿔치기(품셈재료 간접 없이).

재료_품셈재료.json 을 resources/master_data/old/ 로 옮김(지우지 않음) — check_master.load()
가 `*.json` 만 훑어 자동으로 빠짐(코드 안 고쳐도 검사·엔진 다 끊김) ·
build_품셈재료_고르기.py·build_로직_재료_고르기.py 는 다시 안 돌림(한 번 쓰고 마침).

시험 — 옛길(품셈재료 간접)이 죽지 않았는지 자체 마스터로 확인하는 시험 셋을
고쳐 남김(실화면 대신 합성 데이터) · 이제 못 보는 화면 기능(품셈재료 목록·
연결 안 된 줄 거르기) 시험 둘은 뺌(기능 자체가 오늘 사라짐) · 자재품목 분류
기대표에 새로 이은 것들 더함(스페이셔와 같은 이유로 이름 다른 셋 더 뺌).

_틀.md — 재료_품셈재료 절을 「old/ 로 옮김·자료로만 둠」으로 고치고, 7장에
지역·계약종별 고르기 조건 칸을 추가.

typecheck 통과 · 관련 시험 107 통과 · 로직 1354개 전수 대조 — 금액 달라짐 0 ·
새로 멈춤 0 · 새로 통과 2(GC000374·GF000235, 덧줄 식이 못 풀던 것이 오늘 이어져
정상적으로 풀림). PLAN.md 는 이 워크트리에 7장이 없어(gitignore·기기별 파일)
체크 못 함 — 반복된 자리(문서에 이미 적음).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
2026-09-22 14:14:24 +09:00
eomsangdon 499fdadd69 Merge remote-tracking branches 'origin/sub_laptop_1' and 'origin/sub_laptop_3' into main_laptop_1 2026-09-22 14:08:07 +09:00
eomsangdonandClaude Sonnet 5 3dd00a5608 feat(M01): PLAN 7-4b 뒤 절반 ④ 채비 — 버너·퓨즈 새 줄 둘로 이어 남은 MP 직접참조 0
버너(MP000209)·퓨즈(MP000214)는 어제 「후보가 있어도 물건이 달라 못 고름」으로
남겨 뒀으나, 재료_품셈재료.json 을 old/ 로 옮기려면 로직의 MP 직접참조가 다
없어야 함 — 자재품목에 값 없는 새 줄 둘(MT030710 버너·MT030711 퓨즈)을 만들어
그리로 이음(PLAN 7-4b ① 106종과 같은 자리 — 이름·규격·단위·출처 채움 · 값 다섯
칸 빔 · 비고에 왜 기존 후보를 못 썼는지). _키대장.json 갱신 · build_로직_재료_고르기.py
다시 돌려 로직 2줄 반영 — 로직의 「MP……」 직접참조 0(옛 22줄 + 오늘 1줄 = 모두 끝).

typecheck 통과 · 관련 시험 108 통과 · 로직 1354개 전수 대조 금액 달라짐 0·새 멈춤 0.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
2026-09-22 13:58:52 +09:00
eomsangdonandClaude Sonnet 5 91607b27d2 fix(b05,b06): 되살린 시험 둘의 본문 고침 빠뜨린 것 마저 커밋
- 앞 커밋이 파일 옮기기만 걸리고 내용 고친 것(B08 대조 빼기·경로 새 자리)을 안 실음 — 마저 담음

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-22 13:58:01 +09:00
eomsangdonandClaude Sonnet 5 7e507959bd fix(b05,b06): 옛 자료 정리 때 잘못 쓸려 들어간 벽 기울기·기슭막이 표 자리 되돌림
- 09-19 정리로 old/·ref 에 섞여 들어간 B05·B06 전용 표 둘을 resources/data_masonry/ 로 복귀
  (masonry_slope·revetment_sabang, 옛 이름 그대로)
- B06_Section_UI_Cross_Lean.ts·B05_Profile_UI_Drainage_Facility_Fields.ts import 경로 두 줄 고침
- common_util_node_bundle.py 감시 경로도 새 자리로
- 죽은 시험 둘(test_b06_wall_lean_table·test_b05_revetment_sabang_basis) old_code 에서 되살림 —
  끊긴 B08 파이썬 대조 부분은 빼고 B05·B06 몫만 다시 돌게 함 · 5개 통과
- 나머지 넷(공종 마스터 2·공종 산림건설 연결·공종 자원별칭)은 이번에 안 건드림 — old_code 전용이라 걸림 없음

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-22 13:57:39 +09:00
eomsangdonandClaude Sonnet 5 3e3bb8ef09 feat(M01): PLAN 7-4b 뒤 절반 ③ — 고르기 조건에 지역·계약종별 자리를 넓혀 모래·자갈·전력 17줄을 품셈재료 간접 없이 품
master_material.py — PICK_KEYS 에 「지역」·「계약종별」 더함. `_region`·`_tariff`
두 함수를 품셈재료 행이 아니라 조건 묶음 자체를 받게 고쳐 옛길(품셈재료 「연결」
간접)과 새길(호표 「요소」 에 조건을 바로 박음) 이 같은 코드를 씀(sub3 가 분석해
둔 방식 그대로 — 이름 뿌리 endswith·단위 같음·지역 이름 포함 매칭). check_pick —
지역·계약종별 조건은 구분 없이 이름만 확인 · 값이 "입력" 아닌 채 섞이면 틀로 잡음.

build_로직_재료_고르기.py — 품셈재료 연결이 {이름·지역:입력} 이나 {이름·계약종별:입력}
인 줄(모래 MP000004·자갈 MP000006·전력 MP000358)도 그 조건 묶음을 그대로 호표에
박도록 넓힘 — 다시 돌려 로직 4개 파일 17줄 반영(모래 8·자갈 1·전력 8). 전력은
지시대로 재료_유가전력.json(MO 테이블)을 그대로 가리킴 — 자재품목은 안 거침.

test_masterdata_check.py — PICK_KEYS 늘어난 만큼 cond_text 글자 열쇠 시험 고침 ·
지역 값이 "입력" 아닌 조건은 틀로 잡히는 것 확인.
test_m01_api.py — 전력 계약종별 시험을 mf.element 직접 호출로 바꿈(화면 단가
미리보기 `_pick_brief`(M01_MasterData_Store.py, 담당 밖)는 구분·상세구분 자리로만
찾아 지역·계약종별 조건은 아직 못 다뤄 None — 아는 구멍으로 남김 · 계산 자체는
정상 확인).

typecheck 통과 · 관련 시험 108 통과 · 로직 1354개 전수 대조 금액 달라짐 0·새 멈춤 0.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
2026-09-22 13:53:19 +09:00
eomsangdonandClaude Sonnet 5 597bb35458 feat(M01): PLAN 7-4b 뒤 절반 ② — 애매한 후보 셋(색소·에폭시·땜납) 값 없어도 이음 · 버너·퓨즈 둘은 못 고름
사용자 확정(값이 없어도 그냥 넘어감)에 따라 규격·지역이 애매해도 가장 맞는
자재품목 줄로 이음:

  · 색소(MP000078) → 착색제(M-Green, MT006740) — 후보 1줄뿐이라 그대로
  · 에폭시(MP000082) → 주입용 에폭시 습식(MT007705) — 후보 4줄(주입용 습식·건식·
    씰링용) 가운데 낙석방지망 앵커 주입에 흔한 습식형
  · 땜납(MP000285) → 봉땜납 Sn30%(MT001252) — 후보 둘(Sn10%·Sn30%) 가운데 원문
    50:50 에 더 가까운 쪽(정확히는 안 맞음 — 비고에 적음)

버너(MP000209)·퓨즈(MP000214)는 후보가 있어도 물건 자체가 다름 — 버너 후보(개장로용
가스버너, 6~9구용, 915만원)는 산업용 화덕이지 압접가열용 소형버너가 아니고, 퓨즈
후보 다섯(전선퓨즈·통형퓨즈·고리퓨즈)은 모두 전기용이지 테르밋 용접 점화용이 아님 —
못 골라 그대로 둠(비고 그대로).

build_로직_재료_고르기.py 다시 돌려 로직 3개 파일에 고르기 조건 3줄 반영.
test_자재품목_분류.py — 기대표에 셋 더함(품명과 자재품목 이름이 달라 뿌리-이름
우선 검사에서 스페이셔와 같은 이유로 뺌).

typecheck 통과 · 관련 시험 108 통과.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
2026-09-22 13:43:06 +09:00
eomsangdon 0b9df5a3d8 Merge remote-tracking branch 'origin/sub_laptop_2' into sub_laptop_3
# Conflicts:
#	resources/master_data/재료_품셈재료.json
#	resources/tester/test_masterdata_check.py
2026-09-22 13:38:53 +09:00
eomsangdonandClaude Sonnet 5 79f112b40c feat(M01): PLAN 7-4b 뒤 절반 ① — 품셈재료 MP 직접참조 135줄을 고르기 조건으로 바꿈(106종 이음 · VR관 1본=2.5m)
재료_품셈재료.json — 어제 만든 자재품목 새 줄 106개로 「연결」을 이음(값이 비어도
정상) · 그 뒤 build_로직_재료_고르기.py 를 다시 돌려 로직 16개 파일의 옛 방식
「요소": "MP……"」 134줄을 고르기 조건(구분·상세구분·대표)으로 바꿈.

GF000173 VR관(산림 12-11-1) — 자재품목 VR관 줄 단위 「본」과 호표 단위 「m」이
갈려 예전부터 멈춰 있던 자리. 1본=2.5m(고려콘크리트산업 규격표, 어제 확인)로
단위를 「본」으로 바꾸고 수량 식에 ÷2.5 를 넣어 풂 — 고르기 조건은 구분·상세구분·
규격만 두어(대표 안 박음) 「VR관」·「VR관(관급)」 둘 다 후보 — 지금은 파일 차례로
관급 줄(MT009698)이 먼저 걸림(고무링 요소와 같은 방식 · 사용자 확정 필요하면 나중에).

GF000176 커플링밴드는 sub2 가 이름 칸을 고르기 스키마에 더하는 중이라 안 건드림
(자재품목·접속티 안 갈리는 문제, ref/_분석_커플링밴드.md).

남는 MP 직접참조 22줄 — 모래 8·자갈 1·전력 8(지역·계약종별 입력으로 계산 때
풀리는 방식, 어제 분석에서 사용자 확정 보류) · 자재품목 후보는 있으나 규격·지역이
애매해 어제 일부러 뺀 5종(색소·에폭시·버너·퓨즈·땜납). 커플링밴드 1줄까지 23줄.

test_자재품목_분류.py — 새 106종의 품명별 기대 구분표 추가(스페이셔(몰탈 블록)는
뿌리 이름이 같은 다른 물건(철근 스페이셔)과 안 섞이게 그 검사만 뺌 · 실제 연결은
정확한 대표 키로 콕 집어 안전).
test_masterdata_check.py — 「MT:{변수}」 남은 참조 검사를 VR관 반영해 커플링밴드
1줄만 남게 고침.

typecheck 통과(TS 변경 없음) · test_masterdata_check.py·test_자재품목_분류.py
80 통과 · test_m01_api.py 27 통과.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
2026-09-22 13:14:23 +09:00
eomsangdonandClaude Sonnet 5 fa850b182f feat(master_data): 재료 고르기 조건에 「이름」 칸 추가 — 커플링밴드·접속티 가름 (일감35)
고르기 조건(PICK_KEYS)에 이름 칸을 더함 — candidates()가 구분·상세구분·규격에 더해
이름 낱말도 봄(자재품목 원자료는 안 건드림). GF000176(파형강관 부설) 커플링밴드 호표를
옛 방식(품셈재료 손 연결)에서 고르기 조건으로 바꿔 같은 규격(관경)의 접속티와 안 섞이게 함.
재료_품셈재료.json MP000027·32·37 도 같은 조건으로 갱신. _틀.md 7장·시험 갱신.

검증: 이름 없이는 관경마다 커플링밴드·접속티 6줄이 섞임 → 이름을 더하면 1줄로 좁혀짐(전수
확인). 일괄 시험 계산 통과 1291·멈춤 63·금액 달라진 로직 0(앞뒤 동일) · check_master 틀·
본문·로직·조합 0 유지.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
2026-09-22 13:10:09 +09:00
eomsangdonandClaude Opus 5 8472fc9f40 refactor(B08,B09): 폴더째 old_code 로 옮기고 빈 화면 둘만 남김 (PLAN 7-3)
B08_Quantity 86 · B09_Estimation 111 파일을 old_code/ 로 옮김(지우지 않음).
화면은 메뉴·주소·단계 막대만 남은 빈 틀 둘 — main.py 라우터 13 개는 끊음.
B07 이 빌려 쓰던 비탈 길이·면적은 필요한 함수만 B07_DesignDetail_Engine_SlopeGeometry
로 옮겨 적음(면적 적분·노면 면적·측점 묶음은 안 옮김) · 시험 하나를 새로 둠.
B07 구조물도 조립(Cad_StandardSheet)은 2026-09-13 에 이미 도면 목록에서 빠져
부르는 곳이 없어 old_code 로 같이 보냄 — 구조물 그림은 되살리지 않음.
B06 구조물 몫 조회는 빈 값으로 두어 화면이 그대로 서게 함.
B08·B09 를 부르던 시험 25 개도 old_code/resources/tester 로 옮김.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
2026-09-22 12:27:45 +09:00
eomsangdonandClaude Sonnet 5 9c5c1d846b refactor(M01): Z01_MasterData 폴더째 old_code 로 옮기고 등록·문구 끊음 (PLAN 7-2)
라우터·라우트·문구에서 Z01 을 끊음 — M01 만 남김.
시험 여섯도 old_code/resources/tester 로 같이 옮김.
Z01 이 읽던 옛 자료 셋은 디스크에 이미 없음 · master_data/old 는 B08·B09 도 읽어 남김.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
2026-09-22 11:59:59 +09:00
eomsangdonandClaude Opus 5 3a4823b6da perf(M01): 요소·표 저장도 흔들리는 로직만 검사 — 「어느 로직이 무엇을 보는지」 지도 (일감 33)
- 인력 한 줄 저장 7.0초 → 0.9초 · 자재품목 7.2초 → 2.0초 · 소요량 표 1.7초 ·
  자재품목 저장 뒤 목록 2.5초 → 0.45초 · 켠 뒤 첫 목록 3.4초 → 1.6초
- 로직 줄을 셀 때 `Master.get` 을 덧옷(`_Watch`)으로 감싸 그 줄이 본 자리를 모음 —
  키 · 「ID:원문번호」 · 없는 키를 물은 것까지 · 재료 고르기 줄은 자재품목 묶음 통째
- 저장은 그 지도로 흔들리는 줄만 검사(고친 키 · 고치기 전후 원문번호 · 지운 줄) ·
  요소를 고친 저장은 연결·준용 검사를 그대로 돌림
- 저장 뒤 목록은 흔들린 자리를 알려 받아(`stale(names, marks)`) 그 줄만 다시 셈 ·
  다른 창이 고친 파일이면 예전처럼 통째로 다시 셈
- 자재품목을 「구분」 으로 미리 갈라 둠(`master_material.by_class`) — 고르기 후보를
  3만 줄에서 훑지 않음 · 가른 차례는 파일 차례 그대로라 고르는 줄은 안 바뀜
- 전수 확인 — 요소·표 파일 90 개마다 줄을 통째로 비우고 로직 1,354 줄을 다시 검사,
  달라진 줄이 모두 지도 안(지도 밖 0)
- 시험 `test_m01_cache.py` 에 셋 더함(열둘) — 쓰이는 요소를 지우면 저장이 막힘 ·
  요소를 고쳐 저장한 뒤 막힘 표시가 줄마다 검사한 것과 같음 · 인력 줄을 비운 전수 대조

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-22 02:59:52 +09:00
eomsangdon 589403f536 Merge remote-tracking branch 'origin/sub_laptop_1' into main_laptop_1 2026-09-22 02:41:27 +09:00
eomsangdonandClaude Opus 5 ef7dc80198 perf(M01): 저장 검사를 고친 줄 둘레로 좁히고 서버가 뜰 때 마스터를 미리 읽음 (일감 33)
- 저장(`POST /save`) 6.8초 → 0.8초 — 고친 줄과 그 줄을 부르던 줄만 검사
  (안 보는 줄이 부르는 키는 목록이 미리 세어 둔 것을 씀 · 돌고 도는 길은 전체 그림으로)
- 로직 줄만 고쳤으면 품셈재료 연결 · 인력 준용 검사(`check_links`)도 건너뜀
- 로직 밖 파일(요소 · 표)이 섞인 저장은 예전처럼 전부 검사 — 전체 검사는 `check_master` 몫
- 켠 뒤 첫 목록 3.4초 → 0.03초 — M01 라우터가 뜰 때 뒤에서 한 번 읽어 둠(`cache.warm`)
- 저장 전 검사(`check_saved`)를 M01 쪽(`_Store_Cache`)으로 옮김 — 좁히는 값이 있는 자리 ·
  `check_master` 가 700줄에 닿음
- 시험 `test_m01_cache.py` 에 넷 더함 — 없는 로직 키 · 없는 요소 키 · 돌고 도는 참조 ·
  다른 파일에서 그 줄을 부르던 줄이 깨짐(모두 422) · 미리 읽은 뒤 첫 목록

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-22 02:39:33 +09:00
eomsangdonandClaude Sonnet 5 d0d287c4be test(M01): 조합 시험이 정본 견본 조합에 안 깨지게 — 사본 조합 줄을 비워 시작 (일감 30)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
2026-09-22 02:30:38 +09:00
eomsangdonandClaude Opus 5 3c6e68231c perf(M01): 로직·조합 목록이 마스터를 한 번만 읽고 막힘은 미리 세어 둠 (일감 32)
- `_Store_Cache` 신설 — 자국(시각·크기)이 바뀐 파일만 다시 읽음 · 목록은 검사를 돌리지 않고 세어 둔 막힘을 씀
- 요소·표가 바뀌면 모든 로직을, 로직 파일이 바뀌면 그 파일과 그 로직을 부르던 줄만 다시 셈
- 저장 뒤에는 고친 파일을 바로 다시 읽게 알려 줌 — 저장 직후 목록 2.5초 → 0.06초
- `/logics` 둘째 번부터 2.5초 → 0.02초 · `/combos` 0.3초 → 0.01초 · 켠 뒤 첫 번만 3.4초
- 시험 `test_m01_cache.py` 다섯 — 세어 둔 막힘이 줄마다 검사한 값과 같음 · 거름 그대로 · 저장 직후 비침

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-22 02:17:49 +09:00
eomsangdon db519dcbd9 fix(M01): 조합 메모·이름 검사 흠 둘 고침
메모 칸이 글자 아닌 값(수량 등)을 받아도 저장되던 것 · 이름이 글자 아니어도
저장되던 것을 막음(sub2 검증 `ref/_검증_조합.md` 일감 24). 메모는 글자·null만,
이름은 서버 400(글자 아님) + check_combo_form 422(빈 이름·60자 넘음·겹침)로
까닭과 함께 거절. _틀.md 10장 갱신 · 재현 시험 포함 4건 추가(21 통과).
2026-09-22 00:54:20 +09:00
eomsangdon ded5456671 feat(마스터엔진): 고르기 조건에 로직 입력 변수 허용 확인·옛 {변수} 참조 20줄 이관
엔진은 이미 됐음 — run() 이 조건 칸을 fill() 로 채우고 static() 이 검사에서 뺌.
표본으로 확인한 뒤 22줄 가운데 20줄을 고르기 조건으로 옮김(MT 19 · 고무링 1).
못 옮긴 2줄 — VR관(자재 단위 「본」 대 호표 「m」 환산 미확정) ·
커플링밴드(자재품목 표기 두 갈래라 규격으로 접속티와 못 가름).

검사 넓힘 — check_logic 이 조건 칸 {이름} 이 입력·중간인지 봄 ·
check_pick 이 구분 자체가 {입력} 이면 건너뜀(옛 코드는 「후보 0」 오탐).

앞뒤 견주기 — 시험 계산 통과 1,291 · 멈춤 63 그대로 · 금액 달라진 로직 0(1,354 전수) ·
check_master 전부 같음 · 로직의 MT 직접 참조 19 → 0 · MP 160 → 158.
2026-09-22 00:41:55 +09:00
eomsangdonandClaude Sonnet 5 f50bf7e494 fix(M01): 이름 꼴 식이 표 열쇠 별칭을 밑이름으로 풀어쓰던 흠 고침
별칭 이름이 QC001882 처럼 표 열쇠 그대로면 요소 열쇠로 읽혀 밑이름 풀어쓴 글자가 나옴. 요소 테이블(LB·EQ·MT·MP·MO)만 이름으로 풀고 그 밖은 별칭 이름 그대로.
로직 전수 1,291 — 새는 줄 0 (옛 동작과 다른 로직 196) · 값 식·계 그대로 · 시험 추가(21 통과).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-21 23:56:03 +09:00
eomsangdon 2aeb3d4937 Merge remote-tracking branches 'origin/main_desktop_1' and 'origin/sub_desktop_1' into sub_laptop_1 2026-09-21 23:51:51 +09:00
eomsangdonandClaude Sonnet 5 a4b3e7d77a feat(M01): 일위대가 조합 마스터 — 데이터 · 엔진 · 서버 길(화면은 아직)
PLAN 4-2. 조합 = 관리자가 이름을 붙이고 단가산출 로직을 골라 담은 묶음.
마스터에는 담은 로직 목록만 두고 수량·비율·계산은 두지 않음(4-0 확정 · 계산은 프로젝트 몫).

- 새 파일 `일위대가조합.json`(빈 채 · 줄은 사용자가 화면에서 만듦) · 테이블ID `UA`
  · 원문이 없어 머리 `원문` 과 줄 `원문번호` 를 두지 않음(`mk.NO_NUMBER` 에 `UA`)
- 엔진 `scripts/master_combo.py` — 검사 넷(없는 로직 키 · 같은 로직 두 번 · 빈 조합
  · 조합이 조합을 담음) · 「이 로직을 쓰는 조합」 거꾸로 찾기 · 미리 보기 계산
- `check_master.py` 에 「조합」 갈래 더함 · 저장 전 검사(`check_saved`)에도 얹어 422 로 막음
- 서버 `M01_MasterData_Store_Combo.py` — `GET /combos`·`/combo`·`/logic/combos`
  · `POST /combo/new`·`/edit`·`/delete`·`/preview`(저장 없음)
- 조합은 요소 그룹이 아님 — `/groups` 는 여덟 그대로 두고 제 길로만 다룸
- 틀 `_틀.md` 10장 · 계약 `_화면_계약.md` 9장 · 시험 `test_m01_combo.py` 17

검증 — 견본 조합(13-4-1 · 13-4-2 · 13-2-1) 미리 보기 합계가 그 로직 셋의 시험 계산을
비목별로 더한 값과 같음 · 못 도는 줄은 그 줄만 멈추고 나머지 합계는 그대로 ·
저장 전 조합 줄로도 미리 보기 되고 아무것도 안 생김 · 검사 넷 다 422 · 낡은 판본 409 ·
정본 로직 안 바뀜 · `check_master 틀`·`조합` 0건 · pytest 44 통과(조합 17 + api 27)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WaS48Nvs26o3aFUpcfJxVv
2026-09-21 23:50:42 +09:00
eomsangdon f2efbeb2ce Merge remote-tracking branch 'origin/dev' into sub_laptop_2 2026-09-21 23:39:59 +09:00
eomsangdonandClaude Opus 5 8d95041a93 feat(master_data): 관급 못 채움 320 → 108 — 느슨한 두 번째 짝짓기 · 다산 옛 값 ±5% 안일 때만 채움
- update_관급단가_느슨.py 신설 — 엄격한 짝이 안 선 줄을 갈래 안에서 규격 글자를 느슨하게 맞춰 다시 봄
  (아스콘 · H형강 · HI-VP · PE · VR관 · 돌망태 · 무게수로관 뚜껑 · 벤치플룸 · 유공관 · 이음관)
- 아스콘 관리번호 A3-W 떼기 · 못 채운 까닭 비고를 지금 말로 다듬음
- 자재품목 관급 열 212줄 채움(다른 열·줄 그대로) · 시험 · 설계 문서

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
2026-09-21 23:37:13 +09:00
eomsangdonandClaude Opus 5 241926e79f feat(M01): 읽는 식 줄에 변수 이름 꼴을 더함 — 두 칸 줄 맞춤
POST /text 가 줄마다 「이름글」(석공노임 * 메쌓기인력.석공 * (1 + 증가율 %) = 석공비)과 「글」(값 꼴)을 같이 주고 짝 번호를 붙임 — 두 꼴이 한 줄 안에 있어 개수·차례가 늘 같음.

표 찾기·로직 부르기는 3-4 별칭 규칙 그대로(답에 별칭 목록 포함) · 단가 자리는 노임·손료·단가 꼬리 · 만약()은 두 꼴 모두 걸린 쪽만. 계약 3장 갱신 · 로직 1,291개 전수 점검(짝 어긋남 0 · 함수 샘 0) · 시험 20 통과.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-21 23:24:39 +09:00
eomsangdon dc4602ca08 Merge remote-tracking branch 'origin/sub_laptop_1' into main_laptop_1 2026-09-21 22:02:50 +09:00
eomsangdon be80dbf2a8 Merge remote-tracking branch 'origin/dev' into main_desktop_1
# Conflicts:
#	M01_MasterData/M01_MasterData_UI_LogicLab.ts
#	M01_MasterData/M01_MasterData_UI_LogicLab_Style.css
#	M01_MasterData/M01_MasterData_UI_Logic_Api.ts
#	resources/master_data/ref/_검증_별칭_복사.md
2026-09-21 21:37:11 +09:00
eomsangdonandClaude Opus 5 d9a3106181 fix(master): 13장 돌쌓기·돌붙임 첫 고르기 조합을 원문에 있는 조합으로
화면은 고르기 첫 값으로 열리는데 13-4-1(뒷길이 25 · 견치돌 · 골쌓기) · 13-5-1(25 · 메붙임 · 깬돌) 이 원문 표에 없어 「맞는 줄 0개」 로 멈추던 것 — 「돌」 고르기 차례만 바꿔 첫 값을 깬잡석으로(값은 안 고침 · 비고에 한 줄).

같은 흠 일괄 조사 53 → 51 · 남은 51 은 설계자가 넣을 수가 비어 1 이 들어간 탓(목록 ref/_첫조합_없는로직.md) · 되풀이 검사 시험 한 건.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-21 21:35:50 +09:00
eomsangdonandClaude Opus 5 bf7764fb99 test(M01): 낡은 품셈재료 단가 시험을 고르기 조건+대표 줄 단가 시험으로 고침
GC000628 시멘트 줄이 고르기 조건으로 바뀌어 「MP000002」 열쇠가 없어진 것 — 데이터는 그대로 두고 시험을 지금 모양에 맞춤(대표 MT004176 줄의 낮은 값 · 후보 수).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-21 21:24:20 +09:00
eomsangdon c34f72b2d7 fix(M01): 별칭 복사 gather — 사용자 변수가 별칭과 이름이 겹치면 조용히 안 바꾸고 저장 막음
- 교차 검증 어긋남 1건(사용자가 별칭과 같은 이름의 입력·중간·덧줄을 새로 만들면 되돌릴 때
  그 이름이 조용히 찾기() 원문으로 바뀌던 것) — gather 에서 별칭 이름을 그 순간의
  입력·중간·덧줄 이름(_taken)과 견줘 겹치면 FormulaError(400) · 자동 이름 바꾸기는
  화면 개입 없이는 어느 쪽 식인지 못 가려 안전하지 않아 넣지 않음
- 재현 시험 추가 · 전체 로직 1,354줄 펴고 되돌리기 어긋남 0건 재확인 ·
  resources/master_data/ref/_검증_별칭_복사.md 에 「고친 뒤」 덧붙임
2026-09-21 21:20:36 +09:00
eomsangdon e73ef5d3a0 feat(M01): PLAN 3-4 복사해서 만들기 화면 — 별칭 꼴 식 편집·표 바꾸기·로직 부르기 갈래·시험 계산·저장
- 새 M01_MasterData_UI_LogicLab_Copy.ts — [본떠 만들기] → GET /logic/formula(별칭 폼) 편집
  → 표 바꾸기 모달(소요량·계수 검색) · 로직 부르기 그대로/같이 복사 갈래 · 식 줄 고치기·덧줄 더하기
  → POST /logic/formula/preview 로 되돌린 실제 식을 buildCalc 로 재사용해 시험 계산
  → POST /logic/formula/save 로 자체 로직(GX) 저장 · afterSave 로 LogicLab 이 새 키를 바로 엶
- 서버: POST /logic/formula/preview 새로 더함(저장 없이 별칭만 원문으로 되돌림) · 계약 7장 반영
- LogicLab.ts 는 「본떠 만들기」 단추 한 줄만 붙임(정본 로직 화면·New 화면은 안 건드림)
- ORCA 로 13-4-1 을 본떠 저장 — 안 고치면 79,279.668 로 원본과 같음 · 석공 줄 곱 2배로 고치면
  131,716.728 로 바뀜 확인 · 시험 흔적(GX000001·로직_자체.json·키대장 GX 번호) 지움·되돌림
- 시험 `test_m01_copy.py` 에 미리보기 시험 둘 더함 · M01 시험 130 통과 · typecheck 통과
2026-09-21 21:12:43 +09:00
eomsangdonandClaude Opus 5 8a91fa3cca fix(M01): 식 해석기 흠 셋 — 단위 없는 맨 수 · 「식 = 이름」 꼴 · 비목 안 고른 덧줄
· 단위 칸에 「없음」(맨수 · - · % · 빈 글)을 골라 무차원으로 둘 수 있게 함 —
  횟수·배율을 「회」 로 두어 「원/회」 가 남던 덧셈 검사 걸림을 풂 ·
  같은 단위끼리 나누면 맨 수가 되는 것도 맞음
· 줄을 「이름 = 식」 과 「식 = 이름」(A * B = C) 둘 다 받음 — 한쪽이 값 이름 하나면 그쪽이 이름 ·
  양쪽이 다 식이면 그 줄의 등호 자리를 짚음 · 괄호 안 등호와 비교 기호는 안 가름
· 비목 안 고른 덧줄을 「못 옮김」 으로 막지 않고 그 값의 「정할것」 에 「비목」 을 얹어 짚어 줌 ·
  돈 아닌 로직은 덧줄이 없어 안 물음
· 계약 _화면_계약.md 8장(다른 창이 7장을 먼저 씀) · 시험 test_m01_draft.py 18개

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
2026-09-21 20:57:43 +09:00
eomsangdon 7379379bd7 Merge remote-tracking branch 'origin/dev' into main_desktop_1
# Conflicts:
#	M01_MasterData/M01_MasterData_Router.py
#	resources/master_data/_화면_계약.md
2026-09-21 20:22:00 +09:00
eomsangdon c57f0ea06d feat(M01): 복사해서 만들기 엔진·서버 — 정본 로직을 별칭 꼴 식으로 펴고 되돌려 자체 로직으로 저장
- `scripts/master_copy.py` — `찾기()`·`로직()` 한 덩이를 별칭 이름으로 · 원문은 별칭표에 그대로
  (자르기는 `master_formula` 파서 그대로 · 완전 같은 부르기는 합침 · 인자가 갈리면 등장 차례로 번호)
- `GET /logic/formula` · `POST /logic/formula/save` — 저장은 별칭을 원문으로 되돌린 뒤 `logic/new` 재사용
- 계약 `_화면_계약.md` 7장 · 시험 `test_m01_copy.py` 8 통과(로직 1,354줄 되돌리기 전수 포함)
2026-09-21 20:02:12 +09:00
eomsangdonandClaude Opus 5 ce0529ff2c fix(M01): 몫이 모두 0 인 장비 줄이 읽는 식에서 사라지던 것 — 0 원 한 줄과 까닭으로 남김
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-21 19:58:04 +09:00
eomsangdon b639726e11 Merge remote-tracking branch 'origin/sub_laptop_2' into sub_laptop_4 2026-09-21 19:52:45 +09:00
eomsangdonandClaude Opus 5 be8868ca52 feat(M01): 식으로 새 로직 만들기 — 줄로 적은 식의 변수 뽑기·검사·단위 맞춤과 로직 틀로 옮기기
· 해석기 scripts/master_draft.py — 「이름 = 식」 줄에서 변수(처음 나온 줄 · 정의됨/미정)와
  변수마다 정할 것(무엇 = 마스터요소·설계입력·고정값·표찾기 · 단위 · 비목)을 뽑음
· 검사 — 두 번 정의 · 서로 물고 돎 · 안 쓰임(결과가 하나인지) · 못 읽음 · 비목 합 이름
· 단위 검사 — 곱셈은 곱하고 나눗셈은 나누고 덧셈·뺄셈·만약·최소·최대는 같아야 함 ·
  어긋나면 그 줄과 글자 자리 · 「m * m」 과 「㎡」 는 같게 봄 · 비율(%)은 무차원
· 옮기기 — 돈 로직은 결과 식을 항으로 갈라 호표 줄(마스터요소 하나 + 나머지 곱이 수량)과
  덧줄로 · 나머지 정의 줄은 중간(쓰는 차례) · 돈 아닌 로직은 중간 + 결과 식
· 표 찾기는 글자로 안 침 — 변수 하나로 두고 「찾기」 묶음을 모달이 채울 자리만
· 서버 길 POST /api/m01/logic/draft — 검사·미리보기 · save 면 자체 로직(키 GX)으로 저장
· 계약 _화면_계약.md 7장 · 시험 test_m01_draft.py 13개(자재비 식 · 단위 어긋난 식 · 물고 도는 식)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
2026-09-21 19:50:27 +09:00
eomsangdonandClaude Opus 5 d12f471c93 feat(M01): 사람이 읽는 식 줄 API — 비목 묶음마다 「단가 * 수량식 = 금액」 과 소계
- 엔진 `resources/master_data/scripts/master_text.py` — 식 마디를 그 자리에서 나온 수로 풀어 한 줄 글로(찾기·로직·만약·중간 값·요소는 글자로 안 나감 · 「… / 100」 은 「… %」 · 수는 화면과 같은 자릿수)
- `POST /text` — 몸은 `/calc` 와 같음 · 답 `{ok, groups: [{비목, 줄, 소계, 끝수}], 계}` · 멈추면 까닭 한 줄
- 중간 값·끝수는 따로 줄로 안 보임(끝수는 소계 옆 한 마디) · 덧줄은 그 비목의 한 줄 · 하위 로직 줄은 비목마다 한 줄
- 단가 0 이거나 안 쓰는 줄은 까닭 한 마디
- 시험 `resources/tester/test_m01_text.py` 6 통과(13-4-1 · 12-4 · 12-17-1 · 계가 `/calc` 와 같음) · M01 시험 41 통과 · typecheck 통과 · 일괄 시험 계산 1,291 그대로

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-21 19:37:55 +09:00
eomsangdonandClaude Sonnet 5 5b69324207 feat(M01): 「로직 쉽게 보기·만들기」·「로직 흐름 보기」 컨테이너와 계산 코드 걷음 · 정본 로직 화면 복사본 「로직 개선 시험」 컨테이너 더함
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
2026-09-21 19:26:58 +09:00
eomsangdonandClaude Sonnet 5 f458da7f20 feat(M01): 로직 화면에 「새로 만들기」 단추 · 저장 뒤 방식 C 로 열기 · 테스트 컨테이너와 방식 A·B 화면 걷음
- 로직 화면 바의 새로 만들기 단추가 모달을 엶 · 저장·본떠 저장 뒤 새 자체 로직을 흐름 그림으로 바로 엶
- UI_Test* 다섯 파일 삭제 · 왼쪽 「테스트」 줄 제거 · 모달의 까닭 글은 UI_Logic_Text 것을 씀
- 견본 10개 키 목록은 시험(test_m01_test_container)으로 옮김 · 흐름 그림 시험의 옛 파일 이름을 바로잡음

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
2026-09-21 09:57:17 +09:00
eomsangdonandClaude Opus 5 aa86e02b8f feat(M01): 끝수 계산 붙임 · 절 목록·절 거르기·표 조건 값·소유 거름·자체 로직 API
- 엔진 — 로직 줄의 묶음 `끝수`{대상, 자리, 방법}를 계산 끝에 붙임(비목 합마다 끊고 계 = 그 합 · 돈 아닌 로직은 결과) · 글자 끝수는 설명 그대로 · 검사가 묶음 모양을 봄
- 서버 — `GET /sections`(원문 본문 절 목록 + 그 절의 표·로직 수) · `/tables` 의 `section`(13-4 가 13-40 에 안 걸림) · `GET /table/options`(조건 값만) · `/logics` 의 `owner`
- 자체 로직 — `POST /logic/new|copy|edit|delete` · 파일 `로직_자체.json` · 키 GX 서버 발급(원문번호 같아도 줄마다 다른 키) · 정본은 403 · 저장 안 한 초안은 `/calc` 에 `key` "" 로
- 저장소가 700줄을 넘어 쓰기 모양(`keep_shape`·`dump`)을 `M01_MasterData_Store_Shape.py` 로 가름
- 시험 `resources/tester/test_m01_make.py` 8건 통과 · 기존 M01 시험 25건 통과 · 일괄 시험 계산 1,291 그대로

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-21 09:31:45 +09:00
eomsangdon 6e9569c47b knowledge(요율): 국민연금 2033년 이후 추정 요율 걷음 — 법 부칙 명시분만 둠
부칙 제4조① 은 2026~2032년만 명시 — 2033년 이후는 그 해 되면 정함(사용자 확정).
정본 rate_from_2033_percent 삭제 · 비고에 짧게 남김 · build_요율.py 는 법 밖 연도가
정본에 미리 채워지면 잡아내는 쪽으로 바꿈 · 시험 2개 추가.
2026-09-21 07:50:13 +09:00
eomsangdon 6916142d15 Merge remote-tracking branches 'origin/main_desktop_1', 'origin/sub_desktop_1' and 'origin/sub_laptop_1' into sub_laptop_2 2026-09-20 23:32:11 +09:00
eomsangdon 5cdfbefa54 fix(M01): 자재품목 구분→상세구분 거름 살림 · 로직 키 열기 코드 재확인
머리에 구분 묶음이 등록 안 된 파일(재료_자재품목)은 subs() 가 줄에서 바로
구분·상세구분을 모으게 고침 · 화면은 자재품목도 인력·기계와 같은 2단
거름을 씀. 로직 키 직접 열기(openKeyOn)는 이미 전체 로직 목록에서 찾아
여는 구조라 쪽 나눔의 영향을 안 받음 — 0331bb4d 코드 재확인.
2026-09-20 23:29:21 +09:00
eomsangdonandClaude Opus 5 a55d396690 fix(master_data): 표에 없는 조합·지역으로 멈추던 시험 계산 풀기 · 전기용접봉 줄 원문대로
- 시험입력 10개 — 오거비트 혼합층처럼 원문 표에 없는 조합을 피하고(연장 0) 자재지역을 값 있는 시·군으로
- GC000945 전기용접봉 「595㎾h」 → 원문 소모자재 표대로 22.5㎏(595㎾h 는 같은 표의 전력 줄 · 별도 계상)
- GC000002 콘테이너형 가설건축물 단위 「개」 → 자재품목 줄 단위 「동」
- ref/_관리자값_미확보.md 새로 — 관리자가 채울 재료 45 종 · 막힌 로직 56 개 · 남은 다른 까닭 세 줄
- 일괄 시험 계산 통과 1,272 → 1,279 · 멈춤 82 → 75(맞는 줄 0개 5 → 0) · 단위 경고 37 → 14
- 레미콘 규격 14건은 원문이 강도·슬럼프를 안 밝혀 그대로 둠

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-20 23:26:08 +09:00
eomsangdon f35cb441d7 Merge remote-tracking branches 'origin/sub_desktop_1' and 'origin/sub_laptop_1' into sub_laptop_2 2026-09-20 23:19:42 +09:00
eomsangdon 9ac14a83a2 Merge remote-tracking branch 'origin/dev' into sub_laptop_1 2026-09-20 23:19:40 +09:00
eomsangdonandClaude Opus 5 a7643887ca feat(master_data): 로직 입력에 설명 칸 · 산림 테스트 대상 10개 입력 설명 채움
- `_틀.md` 7장 — 입력 칸 목록과 `설명`(쉬운 말 한 줄) · `시험입력` · 고르기 후보 단위 거르기 · 조건 값의 `{입력}` 자리
- 테스트 컨테이너 대상 10개 로직의 입력 97개에 설명 채움 — 서버는 줄을 그대로 내려보내 화면 도움말로 쓸 수 있음
- 로직_건설품셈_09장_미장공사.json 머리에 겹친 「부문」 칸 지움
- 시험 하나 더함

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
2026-09-20 23:14:48 +09:00