- 화면: 왼쪽 로직 목록(원문·장·이름 찾기·막힘) / 가운데 머리·받을 값·호표·중간 값·덧줄·끝수 / 오른쪽 시험 계산
- 고친 것은 캐시에 쌓고 [저장] 한 번에 · [고친 것 버리기] · 줄 더하기·지우기 · 로직 새로 만들기·지우기
- 진입은 mountM01Logic(host) — 공용 진입 파일(sub_laptop_3 몫)이 한 줄로 붙임
- 서버: 로직 하나에 단가 자동(prices) · 요소 찾기(GET /elements) · 저장 전 시험 계산(calc 에 row·file)
- 계약 문서 갱신 · 시험 1개 더함(9개 통과)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
- M01_MasterData 라우터 + 파일 저장소 (/api/m01 · 시스템관리자 전용)
- 저장 = 판본 대조(409) → 적용 → 틀·로직 변수 검사(새 걸림 422) → 씀
- check_master.py 에 load(folder) · check_saved · calc 드러냄
- 계약 문서 장 이름 보정(공통3장)
- 시험 test_m01_api.py 8개 (임시 폴더 사본)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
- 검사 넷: 틀 · 본문 대조(표 허구 · 절 결손) · 로직 검사(요소·표·칸 · 찾기 조건 · 로직 입력 · 돌고 도는 참조) · 시험 계산(호표 줄 · 비목 합)
- 식 읽기·계산은 master_formula.py(틀 7장 범위 · eval 없음 · Decimal)
- 틀: 번호로 적은 값은 원문 이름을 비고에 · 분수·식 값 · 짝 칸 · 8장 검사
- 기계 아홉 줄 비고에 조종원직종 원문 이름(건설기계운전사)
- 시험 test_masterdata_check.py: 견본 셋 손 계산 그대로 · 견본 파일 검사 통과
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
- pdf_lines — 이어진 자리(쪽 넘김 · 「→」)의 되풀이 머리를 뺄 때 셋을 다 갖춘 줄만 뺌:
① 이번 항에서 이미 나온 글자에 이어 붙음 ② 목·항 머리 모양이 아님(1. · 가. · ① · [주] · <…>)
③ md 가 못 가진 글자 몫 안(PDF - md) — 통째로 드는 것부터 빼고 남은 몫으로 앞 토막만 더 뺌
- 기계검사 예외 — md 머리 바로 아래 <!-- 기계검사 예외: 되풀이 머리 --> 면 「예외(되풀이 머리)」 로 적고 확정 지문도 적음
- 잠금 시험은 「통과」 또는 「예외」 를 받음(tool.passed)
- 작성규칙 4-5 되풀이 머리 주석 없앰 · 표 줄 사이 주석 금지 · 6장 예외 표시 한 줄
- 불통 22건 → 0건: 18건 통과로 바뀜(판정 나빠진 파일 0 · 확정지문 다시 적음) · 남은 4건은 예외 표시
pdf_lines 가 항 경계마다 기억을 리셋해 되풀이 찍힌 머리 줄을 스스로 뺌(규칙 4-5 재정의)
md_lines 의 _REPEATED 특별 셈 없앰 - 되풀이 머리 주석은 이제 여느 주석과 같이 뺌
사용자가 지운 되풀이 머리 주석 반영 - 손 댄 47개 파일 중 36개 확정지문 다시 찍음(11개 남음)
- md 주석 <!-- 글자층 붙은 수: 「0.3350.335」→「0.335 0.335」 --> 에 적힌 글자열만 PDF 쪽에서 가름(자간 벌린 수의 거꾸로)
- PDF 에 있고 왼쪽이 오른쪽에서 공백만 뺀 것일 때만 · 기계검사 칸 「글자층 붙은 수 N곳」 · 못 쓰면 불통
- 전후 대조: 기계검사 칸 있는 md 518개 판정 바뀜 0
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
- pum_md_tool.py 가 700줄을 넘어(707) 책 설정·쪽 줄 읽기·머리 찾기를 pum_md_base.py 로 옮김 (pum_md_tool 이 다시 내보냄)
- read_rows: 한 자리 수끼리 틈이 글자 높이보다 좁으면 이어 셈(「체 감 온 도 3 3 도」→33) · 표 칸 틈(1.2 이상)은 그대로
- md 주석 <!-- 자간 벌린 수: 「1 . 3」→「1.3」 --> 에 적힌 글자열만 PDF 쪽에서 붙여 셈 · 기계검사 칸 「자간 벌린 수 N곳」 · PDF 에 없거나 공백 뗀 것이 아니면 불통 (브레인 지시)
- 작성된 md 218개 판정 고치기 전후 같음(작업 중이던 건설 1-02 만 달라짐)
- 작성규칙 6장 한 줄
- test_산림_산출도_그대로_금액_불변 하나만 skip 표시(옛 사슬 동결 · 원천 벌 json 줄바꿈 지문 · 단가 연결 때 되살림 — 브레인 지시)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
- PDF 사용자 영역 글리프는 ①② 에서 빼고 기계검사 칸에 「글자층 밖 글리프 N개(쪽) · 받아씀 N자」
- md 는 <!-- 글자층 밖 -->…<!-- /글자층 밖 --> 로 감싼 받아쓰기를 ①② 에서 뺌(감싸지 않으면 더함)
- 호환 한자(U+F900–FAFF)만 통합 한자로 — NFKC 통째는 안 씀(㎥·①·㎡ 지킴)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
- 건설: 부문 폴더(01_공통부문 …) 아래 장머리 45 · 절·항 275 — 8-2·8-3(건설기계) · 9-5(측량)은 절머리 + 항마다
- 도구: 책마다 차례 모양 · 절 머리 마침표 유무 · 쪽 꼬리(「30 공통부문」) · 부문 표지 쪽 앞에서 끊음 · 뒤 빈 쪽 뺌
- 파일 이름에서 개정 표지(「('21, '22년 보완)」) 뗌 · 자간 벌린 이름(「측 량」) 붙임 · status 는 장 폴더별
- 산림 제4장 확정 일곱: check 로 기계검사·확정지문 두 칸만 채움(①② 모두 통과 · 본문은 안 건드림)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
- 사용자 「완전히 되돌려」 뒤 dev 를 거쳐 다시 들어온 1-2·1-3·1-4 코드 26 경로를 9629430a 모습으로(고친 17 되돌림 · 새로 생긴 9 지움)
- 대상: Z01_MasterData 17 · main.py · ui_template_locale_b3.ts · resources/tester 의 Z01 시험 7
- 품셈 md·도구는 안 건드림 · 이력 재작성 없음(되돌림 커밋)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145cr1DMC5Ft8fouQSXtp69
- check: ① 수(갯수까지) ② 글자(공백 뗌) 양방향 대조 · 어긋난 자리를 쪽·줄로 출력 · 머리 기계검사 칸에 적음
- md 쪽은 머리 · 주석 · 그림 · 표 문법 · 제목·인용 표시 · 첨자 표시를 빼고, 막음표(\) 뒤 글자는 원문으로 셈
- 확정 파일은 통과할 때 확정지문(LF 로 센 sha256)을 한 번만 적음 — 있는 지문은 안 덮음
- pages: 쪽 그림 150dpi → tmp/pum_pages(git 밖) · status: 장별 상태 표
- test_pum_md_locked.py: 확정 파일 지문·①② 0 · 머리 칸 다 있음
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
- 제4장 일곱(다른 창 시범분)은 건너뜀 → 산림 전체 장머리 14 · 절 189
- 절 이름·표지는 본문 머리 글자 그대로(번호 뒤 마침표) · 띄어쓰기는 쪽 그림의 글자 틈으로 되살림
- 도구: 장마다 0-00_장머리.md · 이미 있는 자리는 번호로 봐서 건너뜀(이 폴더·다른 창 브랜치)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
- 산림 차례(PDF 3~12쪽)에서 장 14 · 절 189 · 쪽 범위 · 시작/끝 표지
- 절 머리는 번호로 찾음 — 차례 이름 오타 다섯(면벅·조림·우드그래풀·소형 운재) 때문
- 표지는 PDF 글자 그대로(번호 뒤 마침표 포함) · 띄어쓰기만 차례를 따름
- 다른 창 브랜치에 이미 있는 파일은 안 만듦(합칠 때 부딪힘 막음)
- 시험 test_pum_md_tool.py: 순수 함수 · 산림 차례 개수
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
- 기초단가 표: 칸 나갈 때 즉시 저장 없앰 · 고친 칸·새 줄·지울 줄은 초안(sessionStorage z01-draft:base:{kind})에 쌓고 [저장] 한 번에 보냄 · [고친 것 버리기]·[줄 추가]·[줄 삭제]·[초기값으로] · 409 면 초안 지키고 알림 · 서버가 revision 을 줄 때만 고치기 단추 섬
- 옛 덮개 길(칸 단위 PUT · 고친 것 모아 보기 · 덮개 판정 표시)과 그 사전 글자 뺌 — 계약 1-0 에서 서버 쪽 삭제
- 공종 편집(Z01_MasterData_UI_WorkItem.ts · _WorkItem_Rows.ts): 왼쪽 목록(상태별 개수·검색) / 머리 / 구성 줄 표(갈래별 · 자원 찾기 = 기초단가 검색) / 품셈 원문 표+[주] 읽기 전용 / [저장]·[초기값으로]·[검수 완료] · 초안 열쇠 z01-draft:work_item:{key}
- 공종 API(sub_laptop_3 e1c71c3e) 모양에 맞춤 — 줄은 id + 계약 칸 열하나만 보냄(extra=forbid) · 저장·초기값 응답(새 GET 모양)으로 바로 다시 그림 · 저장된 고침(changed_columns·is_added) 표시
- 초안 순수 함수 Z01_MasterData_UI_Draft.ts + 시험 test_z01_master_draft.py
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0145cr1DMC5Ft8fouQSXtp69
- Z01_MasterData_Repository_BasePrices.py 신설 — master_base_price·master_revision Raw SQL(읽기·줄 수·판번호·저장·되돌리기) · 판번호 줄을 잠그고 다시 봄 · 틀리면 통째로 되돌림
- GET /base-prices/{kind} 가 DB 를 읽음 · 응답에 revision · 줄마다 changed_columns·is_added 추가
- PUT /base-prices/{kind} {base_revision, edits, added, deleted} — 판 다르면 409 · 하나라도 틀리면 아무것도 안 씀 · edits 500 상한 · 모르는 칸 거절
- POST /base-prices/{kind}/reset {row_keys} — 주입 줄은 data := seed(지운 줄도 되살림) · 추가 줄은 지움
- 기계 시간당 단가는 DB 노임·유가로 읽을 때마다 셈 · 제원은 줄 값에서(추가한 기종도 섬)
- 옛 덮개 층 삭제 — Z01_MasterData_Overrides.py · 칸 단위 PUT · /overrides·/overrides/clear
- 새 줄 열쇠는 서버가 줌(added/{난수}) · 주입 data 에 '@' 칸이 없어도 축 잠금은 파일 원본으로 섬
- 시험: DB 가짜(helper_z01_fake_repo.py) 로 API 손질 · 저장소 SQL 흐름은 가짜 커넥션으로 잼
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
- GET /work-items(상태별 개수) · GET/PUT /work-items/{key} · POST …/reset 신설, 시스템관리자 전용 묶음에 등록
- 저장은 한 트랜잭션 — 낡은 revision 409 · 없는 자원 열쇠·남의 줄 id 422 · 실패 시 전부 되돌림
- 빠진 줄은 초기값 줄이면 숨김(초기값으로 때 살림) · 관리자 추가 줄이면 지움
- 검사·줄 비교·되돌리기 규칙은 WorkItems.py 순수 함수 · SQL 은 Repository_WorkItems.py
- 옛 기초단가 표의 공종 축 보기(JSON 읽기)는 그대로 둠 — BasePrices.py(sub_laptop_2 몫)가 동기로 부름
- 시험 15개(test_z01_work_item_edit.py) — DB 없이 가짜 커넥션으로 409·422·롤백 확인
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
51d0615a(건설 8장 — 글줄 속에 눌려 있던 표 넷을 떼어 세움) 뒤 원천 벌과
공종 마스터가 안 뽑혀 시험 빨강 2건(test_build_pum[pum_const] ·
test_work_item_master_const 산출 대조).
- pum_const_2026.json: _build_pum.py 로 다시 뽑음 — 표 2,275 → 2,279
(새 표 C2278~C2281: 8-2-23 유압 파일 해머 · 8-2-24 진동파일 해머 ×2 ·
8-2-25 워터제트 병용 압입공), 기존 표 글자 변화 0 · 줄만 밀림 280
- 건설 공종 마스터(const_*)만 다시 지음 — 산림 쪽 손 안 댐
- 공종 1,367 그대로 · 새 열쇠 발급 0
- 전후 대조: 공종 3개(CW-00340~342)에 새 표 붙음, 기존 표 3개(C0499 ·
C0502 · C0520)는 값 불변 — 주석에 섞여 있던 표 글자만 빠짐, 나머지
37 공종은 줄 번호만 이동
- 시험 test_표는_다_붙고_못_붙인_표는_목록 표 수 기준 2,275 → 2,279
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QqkvdyxUtANWroVKpQUyxE
브레인 B41 깃 싱크용 마무리 커밋.
- 충돌은 만들어지는 마스터 넷뿐 — 손으로 안 합치고 **추출기로 다시 뽑음**
- 서브가 양수기 7993-0020 값이 이웃 7992 것임을 밝혀 오귀속을 닫음 → 연료 줄 276 → 275
· 그 줄에만 있던 `parse_method` 칸이 비어 이름표에서도 뺌(열 546 → 545)
- 건설 표 2,274 → 2,275 · 형태 미판정 151 그대로 · 산림 미판정 0 · 건설 밑수 미확보 450
- PDF ↔ md 구멍 — 결손 749 → 756 · 허구 547 → 540(합은 그대로 · 값 일곱이 허구에서 결손으로 옮겨 감)
· 장별 목록도 다시 뽑음
- ⚠ 전체 시험은 도는 중에 멈춤(B37 중지 지시) — 이 커밋은 싱크를 위해 트리를 비우려는 것
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BW6Jdsh18WPtYUR6THZJqn