- 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
- 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
- gen_md.py 색인 대상에 original/원가계산 추가 — 산림 표준품셈 이관 뒤
재생성 때 목록에서 빠지던 문제 해소. 그림만 든 폴더(pic)는 제외
- 04_참조_법령기준_목록.md 5절(AUTO 블록)만 다시 뽑음 — 1~4절 수기 등록표 보존
- 원가계산 절 신설: 산림·건설 표준품셈, 노임단가 2종, 유가·환율·자재단가 등 10폴더
- 그동안 색인에 안 올라가 있던 법률 10건(건설폐기물·폐기물관리법 계열)과
행정규칙 2건(예정가격작성기준·환경친화적인 도로건설 지침)도 함께 올라감
- 색인 링크 986개 전부 실제 파일로 이어짐 확인
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QqkvdyxUtANWroVKpQUyxE
품셈 8-1-7 5호 「유류가격은 해당지역의 가격으로 한다」. 칸은 있었으나 시도별 값이
없어 잠겨 있었음. 오피넷 avgSidoPrice.do 스냅샷을 받아 데이터셋으로 세우고 물림.
- 안 고르면 전국평균 그대로 — 현장 소재지를 임의로 찍지 않음.
- 판에 없는 지역은 조용히 전국평균으로 눕지 않고 사유를 남김.
- 「지역 공시가」를 고를 수 있는지는 코드가 아니라 판이 정함.
- ⚠ 원천의 시도 가름이 행정구역과 다름(20=전남광주 한 줄, 07·16 없음) — 원문 그대로 둠.
- 수집 스크립트에 시도별 호출을 더함(전국평균과 두 벌로 보존).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
페이지 번호식 이름(`..._p101_1.png`)을 내용이 드러나는 이름으로 바꿨다.
예: `노선측량_그림5-2-27_중심선과영선의위치비교.png`
- 그림 120개 이름 변경(122개 신규 등록), 본문 md 12개의 링크를 새 이름으로.
- 추출 파이프라인(`_pipeline/pdf2md.py`)과 QC 리포트 갱신.
확인: 그림 127개 · md 이미지 링크 127개 · 깨진 링크 0.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
파일마다 포맷 폭이 달라(≈80 대 100) 한 줄만 고쳐도 포맷터가 무관한 줄을 대량
재포맷했음. 사용자 지시로 전체를 한 번에 맞춤. 코드 동작 변경 없음 — 포맷만.
- 프론트엔드 `.ts/.css/.html` → 저장소 prettier (`.prettierrc`, printWidth 100)
- `B07_DesignDetail/openwebcad/**` → 자체 biome (tab 들여쓰기·single quote·lineWidth 100).
`biome format` 만 사용 — `biome lint --write` 는 포맷 아닌 코드 수정까지 하므로 제외
- 파이썬 → `ruff format` (엔진 코드는 이미 정합, resources·scratch 스크립트 24개만 변경)
두 포맷터가 서로 되돌리지 않도록 `.prettierignore` 신규 — openwebcad 와 빌드·산출물
폴더를 prettier 대상에서 뺌. `.prettierrc` 에 `endOfLine: "auto"` 추가 — 기본값 `lf` 가
`core.autocrlf=true` 로 받은 CRLF 파일을 매번 전부 다시 써서 `--list-different` 가
실제 포맷 차이를 가리고 있었음.
검증: `tsc --noEmit` 통과(루트·openwebcad 둘 다), pytest 349 passed / 17 skipped /
0 failed, CAD vitest 87건 중 81 passed / 6 failed(laptop-sub 기준선과 동일, 회귀 없음).
포맷터 재실행 시 prettier·biome 모두 변경 0건.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>