1717 Commits
Author SHA1 Message Date
eomsangdonandClaude Opus 5 1edfc00960 Merge origin/main_laptop_1 — 위키 그래프 충돌 다섯을 랩탑 것으로 품
두 PC 가 각자 `graphify update` 를 돌려 같은 이름으로 다른 그래프를 냈음.
그래프는 만들어지는 물건이라 내용을 합칠 것이 아니고, 랩탑 것이 최신·전체라 그쪽을 취함
(CLAUDE.md 6장 「같은 자리를 서로 다르게 고쳐 부딪히면 랩탑 쪽」).

  2026-09-09/graph.json 796KB → 906KB · graph.html 845KB → 985KB
  + .graphify_analysis.json · .graphify_labels.json · cache/stat-index.json

곁들여 되살린 것 —
  B08_Quantity/0_old_260726_codex.zip 이 랩탑 `auto:` 커밋에 삭제로 실려 있었음.
  랩탑이 지운 것이 아니고 이 PC 파일이 이력과 해시까지 같아, 시놀로지가 랩탑 쪽에
  파일을 못 놓은 자국으로 보고 되살림. 지우기로 정하면 한 줄로 다시 뺄 수 있음.

⚠ 남은 것 — 두 PC 가 다 위키화를 돌리면 이 충돌이 되풀이됨. 만드는 곳을 한 곳으로
   모을지 사용자 판단 대기.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 19:50:50 +09:00
eomsangdonandClaude Opus 5 c59f36eccd feat(B09): 표본이 얇은 노임에 신뢰도 표시 + 층따기 사전 밑수 정정
PLAN 9-6 · 8-32 두 잔손질.

① 미공표 직종 신뢰도 플래그 (9-6)
   지식DB 가 「단가 채택 시 플래그 유지 필요」(노임단가_적용 §2-3) ·
   「해당 단가 사용 시 경고 표시」(원가_입력변수_사전)로 두었는데 노임 층에 없었음.
   - load_labor_reliability() — 원문 기호 `*`(조사현장 5개 미만)·`**`(미조사) 그대로.
     정상 공표 직종은 아예 안 담음(빈 값과 「정상」을 구별할 일이 없게).
   - PriceTitle.reliability — 노임 제목 전부 + 조종원 줄에도 같이 붙임.
   - build_summary 의 labor_reliability → 화면 힌트 줄로 경고.
   ⚠ 금액을 막지 않음 — 값은 그대로 서고 「조사현장이 적다」는 사실만 나름.
   ⚠ 내역에 실제로 실린 것만 경고 — 카탈로그 40직종을 다 띄우면 쓰지도 않는 직종이
     화면을 채움. 실측 둘: 1037 벌목부 · 1050 일반기계운전사(지식DB 예시 그대로).

② 층따기 사전 밑수 (8-32)
   원가_출력변수_사전 B2-9 가 「㎡·m」였음. 품셈 9-18 은 ㎥ 당이고, 우리도 확정 2차 ①
   로 면적이 정본이되 길이를 곱해 ㎥ 로 내보내고 있음. 두 축을 한 칸에 적어 ㎡ 로
   내도 되는 것처럼 읽히던 자리 — 밑수를 ㎥ 로 고치고 까닭을 비고에 적음.
   코드는 이미 ㎥ 로 내보내 수치 변화 없음.

시험 여섯 신설 · 전체 1182 통과 · 실패 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 19:47:43 +09:00
eomsangdon dee9e95d73 auto: 2026-09-09 19:43 (ESD_LAPTOP) 2026-09-09 19:43:41 +09:00
eomsangdon 5bf4ff8d1f auto: 2026-09-09 19:43 (EOMSANGDON-HOME) 2026-09-09 19:43:12 +09:00
eomsangdonandClaude Opus 5 db38e75724 chore(wiki): graphify 산출물 전체를 git 으로 공유 (2026-09-09 사용자 확정)
날짜별 산출물까지 통째로 실어 창끼리 같은 위키를 보게 함. 374 파일 13MB.

PC 마다 값이 다른 둘만 제외 —
  `.graphify_python`            이 PC 파이썬 실행 경로
  `.graphify_incremental.json`  이 PC 저장소 절대경로가 박혀 있음

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 19:42:12 +09:00
eomsangdonandClaude Opus 5 2d0d779c95 chore(wiki): graphify 그래프를 git 으로 나르게 함
창끼리 같은 위키를 찾게 그래프 본체 여섯만 추적 (합쳐 120KB).
위키화 뒤 `git sync` 한 번이면 문서와 그래프가 함께 옴.

- `.gitignore` 40행 `graphify-out/` 에 `/` 가 없어 docs/wiki/graphify-out 까지
  같이 막고 있었음 (`git check-ignore` 로 확인). 뿌리에만 걸도록 고침
- 날짜별 산출물 13MB · `.graphify_python`(PC 별 경로) · `.graphify_root` ·
  `.graphify_incremental.json`(이 PC 절대경로가 박힘) 은 계속 제외
- `.gitattributes` — 줄끝 변환을 끔. 바꾸면 서명(.sig)이 깨지고 창마다 헛 diff 가 남음

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 19:40:52 +09:00
eomsangdonandClaude Opus 5 0ff26d4378 chore(tester): 시험 예외 목록에서 사토장 둘 뺌 — 정본 까닭이 덮음
`spoil_bank.side` · `extra_distance_m` 은 정본에 `default_basis` 로 까닭이 적혀 있어
목록 없이도 통과함(빼고 돌려 확인). **앞으로도 목록에 넣지 말 것**을 그 자리에 적음.

⚠ 같은 상태인 것이 **13 개 더 있음** — `revetment`·`soil_guard`·C군 `side` 계열.
  빼도 통과하나 이번에는 안 건드림(주석 덩어리가 얽혀 있어 잔손질 범위를 넘음).

`resources/tester/` 1183 통과 / 22 건너뜀 / 실패 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 19:40:40 +09:00
eomsangdonandClaude Opus 5 f9874fd5c9 knowledge(verification): 계획서 공통기반·참고·검증프로젝트 이관
사용자 판단으로 계획서에서 뺀 것 — 원문 그대로 보관.

- 공통기반 0-5·0-7 : 행동지침 5장(계산 자리·데이터 3층)과 겹침
- 8-33            : 창별 검증 프로젝트 표는 OWNERS.md 자원 점유로, 나머지는 여기
- 참고 절 셋       : 데이터 세트 정의는 지침과 중복, 구조물 구현 기준·계곡 통과
                    시설 선정은 옛 자료

계획서 1,167줄 6.4만 자 → 1,058줄 5.9만 자.
미체크 53 → 57 (0-8 고칠 순서 셋 · 투영 이월 하나를 체크박스로 세움).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 19:16:00 +09:00
eomsangdonandClaude Opus 5 ca639d57c5 knowledge(verification): 계획서 완료분 근거 31덩이 이관 (4.4만 자)
상시계획서에 남아 있던 완료된 조사·근거 원문을 검증 폴더로 옮김.
계획서에는 결과만 남기고 경로 인용도 두지 않음 (2026-09-09 사용자 확정).

계획서 1,841줄 10.5만 자 → 1,166줄 6.5만 자 (-38%).
미체크 항목 53건 그대로 — 살아 있는 일감 손실 없음.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 19:10:42 +09:00
eomsangdon 7291a98471 Merge PR #14 - fix(tester): 옮긴 시험이 옛 경로 부르던 것 바로잡음 2026-09-09 18:28:07 +09:00
eomsangdon 9f6082452e Merge remote-tracking branch 'origin/main' into main_laptop_1 2026-09-09 18:23:53 +09:00
eomsangdonandClaude Opus 5 265ba8352e fix(tester): 옮긴 시험이 옛 경로(tmp/tests)를 부르던 것 바로잡음
시험을 `resources/tester` 로 옮긴 뒤 **한 건이 실패**하고 있었음 —
`test_preview_cost` 가 짝 파일을 `tmp.tests.…` 로 불러 못 찾았음(옮긴 폴더에 없음).

- `from resources.tester.test_preview_assets import …` 로 고침
- 실행 안내 문구 셋도 새 경로로(`diag_structures` · `helper_b06_fill_slope_length` ·
  `test_common_util_crs`)
- 정책 시험 설명은 **사실이 바뀌었으므로** 고쳐 적음 — 「git 밖이라」가 아니라
  「옮겨서 함께 건너가되, 까닭은 여전히 값 옆(정본)에 두는 것이 옳다」

`resources/tester/` 1183 통과 / 22 건너뜀 / **실패 0**.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 18:23:46 +09:00
eomsangdon 46795d1f18 chore: 네 창 작업 269건 main 반영 (2026-09-09) (#13) 2026-09-09 18:21:26 +09:00
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
eomsangdonandClaude Opus 5 d7cb14f416 test(B08): tmp/tests 중 tester 에 없던 47 개를 resources/tester 로 옮김
tmp/ 가 창끼리 안 건너가는 것이 확정돼(랩탑이 시간 두고 두 번 확인) 시험·예외가
저절로 건너가도록 git 안으로 옮김. 사용자 확정.

- 내용은 하나도 안 고침 — 자리만 옮김. tmp/tests 는 남겨 둠.
- 같은 이름이 이미 있던 64 개는 랩탑 것을 그대로 두고 건너뜀.
- helper_b05_*.js 둘은 랩탑이 .cjs 로 이미 올린 것과 **줄바꿈만 다른 같은 내용**이라
  복사본을 도로 뺌(시험이 .cjs 를 부름).
- resources/tester/ 에서 전체 1176 통과 · 29 건너뜀 · 실패 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 17:15:57 +09:00
eomsangdon a5eb559f3d Merge remote-tracking branch 'origin/sub_laptop_1' into main_desktop_1 2026-09-09 17:13:14 +09:00
eomsangdon 9f4610ff53 Merge remote-tracking branch 'origin/sub_desktop_1' into main_desktop_1 2026-09-09 17:13:12 +09:00
eomsangdonandClaude Opus 5 0ef32b5279 chore(tester): 시험을 resources/tester/ 로 옮김 — 창끼리 건너가게
⚠ **뿌리** — `tmp/` 는 창 사이에 안 건너감(실측 확인: 상대 창이 놓은 `tmp/_sync_probe.txt`
가 시간을 두고 두 번 봐도 안 보임). 그래서 **정본(등록부 스키마)만 건너가고 그것을 읽는
시험은 안 건너가** 오늘 두 번, 같은 시험이 **연 창은 통과·받은 창은 실패**가 됐음.

- `tmp/tests/*` 를 `resources/tester/` 로 **복사**(127 파일). 내용은 **한 줄도 안 고침**
- `tmp/tests` 는 **남겨 둠** — 되돌릴 자리(사용자 지시)
- 실행: `./venv/Scripts/python.exe -m pytest resources/tester/ -q`
  옮기기 전과 **같은 수**: 617 통과 / 22 건너뜀 / 실패 0

⇒ 이제 시험·예외·까닭이 **정본과 함께** 움직임. 오늘 세운 「예외는 정본 스키마에」와 짝임.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 17:12:30 +09:00
eomsangdon 7d1e0c36d4 Merge remote-tracking branch 'origin/sub_desktop_1' into sub_laptop_1 2026-09-09 16:11:47 +09:00
eomsangdon bfae84aa0e Merge remote-tracking branch 'origin/main_laptop_1' into sub_laptop_1 2026-09-09 16:11:46 +09:00
eomsangdon f7dfa57e8f Merge remote-tracking branch 'origin/main_laptop_1' into sub_desktop_1 2026-09-09 15:38:56 +09:00
eomsangdon 186ae4911c Merge remote-tracking branch 'origin/main_desktop_1' into sub_desktop_1 2026-09-09 15:38:54 +09:00
eomsangdon 5e8acb1312 Merge remote-tracking branch 'origin/sub_desktop_1' into main_desktop_1 2026-09-09 15:38:44 +09:00
eomsangdon fe8a30c31f Merge remote-tracking branch 'origin/main_laptop_1' into main_desktop_1 2026-09-09 15:38:42 +09:00
eomsangdonandClaude Opus 5 799e0b1e79 feat(B09): 확정 5차 — 제근 밑수를 건설품셈에서 빌려 옴 (÷1,000 환산 포함)
사용자 확정 5차 6번 「제근 밑수 — 면적 축. 건설품셈 3-9-2 「1,000㎡당」을 빌려 씀」.

- `WorkItemUnit.BORROWED_UNITS` 신설 — **사용자가 정한 자리만** 담음. 우리가 골라 채우는
  표가 아님. 값과 **근거 문구를 한 자리에** 둠(⚠ 교차 참조 표시 — 임도 전용 품이 있는데
  건설품셈을 쓰는 것이라 화면이 그 사실을 밝혀야 함)
- ⚠⚠ `BORROWED_BASIS_PER` — **「1,000㎡당」이라 ÷1,000 환산**. 단위만 「㎡」로 달고 값을
  그대로 두면 **금액이 천 배**가 됨. 단위와 배수를 한 자리에 두고 시험으로 못 박음
- ⇒ 제근 여섯 갈래에 밑수가 붙어 단가가 섬 — 굴착기 0.7㎥·소림 **55.4원/㎡**

⚠ **자릿수가 견준 값과 어긋남을 사유에 함께 적음** — 실무 영월 「뿌리뽑기」는 475원/㎡ 이고,
빌려 온 3-9-2 는 같은 1,000㎡당에 굴착기(0.2㎥) 3.76hr 로 산림품셈 9-21 의 0.80hr 보다
4.7배 큼. **100㎡당으로 보면 실무와 자릿수가 맞음.** 값은 확정대로 두고 **어긋남을 보임** —
지어내지도, 조용히 넘기지도 않음.

검증: pytest 311 통과(신규 4)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 13:22:10 +09:00
eomsangdonandClaude Opus 5 5cc5329cac fix(B06): 자동과 같은 측구 선택은 「자동」으로 풀림 — 다시 굳지 않게
화면 토글이 **2단**이라 「자동으로 되돌리기」 단추가 없음. 되돌리려면 원래 값으로 다시
누르는 수밖에 없는데, 그것을 선택으로 굳히면 **방금 고친 병이 그대로 되돌아옴**
(지형이 바뀌어도 안 따라감).

⇒ 선택이 자동값과 같으면 **선택 없음(자동)** 으로 본다. 파이썬·TS 짝 양쪽.
시험 하나 추가 — 「자동과 같은 선택은 자동으로 푼다」. 전체 617 통과.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 13:18:21 +09:00
eomsangdonandClaude Opus 5 ac8e8f1e59 fix(B08): 물량 0 인 구조물을 내역에서 뺌 — 0 원 줄이 만들어지던 자리
물넘이포장이 면적을 못 받아 「0.0 ㎡」로 내역에 서고 있었음. 코드가 붙어 있어
0 원 줄이 만들어지고 화면에는 값이 있는 줄로 보임 — 0 은 「없음」과 구별이 안 됨.
줄은 그대로 넘기되 in_bill False + 까닭(원단위 사유 그대로) + input_missing 로 둠.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 13:13:54 +09:00
eomsangdonandClaude Opus 5 01c96e9a11 fix(B06): 측구 「선택」과 「결과」를 가름 — 한 번 저장되면 자동이 안 돌던 자리
⚠⚠ 한 칸(`ditch_enabled`)에 **두 뜻**이 담겨 있었음.
결과(실제 섰나)를 그대로 다시 입력으로 넣어 읽었으므로 **한 번 저장되면 자동 판정이
영영 다시 안 돌았음.** 계획고를 내려 절토가 생겨도 측구가 안 서고 **아무 말도 안 나왔음.**

- **선택** `ditch_choice` (없음 = 자동) · **결과** `ditch_enabled` (실제 섰나)로 가름
- 자동 판정을 **먼저** 하고 선택을 그 위에 얹음. 양성 단면은 선택보다 기하가 먼저
- ⚠ **옛 저장분은 자동값과 다를 때만 선택으로 살림** — 같으면 자동이 그렇게 냈던 것이고
  다르면 사용자가 일부러 바꾼 것임. 설계 의도를 잃지 않으면서 굳은 값을 푼 것
  (오늘 `length_m` 에서 겪은 「저장분이 걸린 자리」를 같은 방식으로 처리)
- 화면 카드는 이제 **선택**을 읽어 상태를 세우고, 표시는 **결과**를 보임
- 파이썬·TS 짝 양쪽 + 호출부 여섯 곳(재계산·저장·확정·사토장·요청 스키마)

시험 다섯 추가 — 「결과를 다시 넣어도 자동이 계속 돎」이 그 잠금. 전체 616 통과.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 13:10:47 +09:00
eomsangdonandClaude Opus 5 e71147c1b2 fix(B08): 코드 없는 줄에 막힘 표시를 붙임 — 금액이 조용히 빠지던 자리
랩탑 메인이 화면에서 잡음: 「측구터파기 · 굴삭기+브레카」가 work_item_code null
인데 blocked_kind 도 null 이라 아무 말 없이 금액만 빠졌음.

인계본의 bill_flag_warnings·unmatched_work_items 에는 이미 실려 있었음 —
목록은 있는데 줄에 표시가 없었던 것. 줄 단위로 보는 쪽(B09·화면)은 목록을 안 봄.
같은 모양이 여덟 줄이었음(흙깎기·측구터파기·도자운반 둘·덤프운반 둘·지장목제거·큰돌쌓기).

- 토공 줄: 코드가 없으면 시공법 미지정이면 input_missing, 매핑을 못 이었으면
  unit_data_missing 으로 갈라 답. 다음에 할 일이 다름(사용자 입력 vs 매핑 작업).
- 운반 줄: 같은 규칙. 무대(free_haul)는 품에 포함이라 안 세우는 것이지 막힌 게
  아니므로 표시를 안 답.
- 불변식 시험을 세움 — 코드도 막힘 표시도 없이 내역에 서는 줄이 하나라도 있으면 깨짐.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 13:10:22 +09:00
eomsangdonandClaude Opus 5 072f560a59 fix(B08): 옹벽 묶음 감사 둘 — 구조물 이름 코드값 노출 · 터파기 빠진 줄이 안 보이던 것
- 레지스트리 이름이 없으면 내역 줄 이름에 코드값이 그대로 떴음(`retaining_wall`).
  _Wording.type_label 이 이미 대비표를 들고 있으므로 그것을 씀 — 이제 「옹벽」으로 섬.
- 관측 원단위로 가는 구조물은 표에 터파기 줄이 없으면 그 구조물만 조용히 빠졌음.
  옹벽이 터파기 0 줄인데 사유도 안 났음(돌쌓기는 세 줄이 섬). 값을 지어내지 않고
  「터파기가 안 선 구조물」 줄을 in_bill False · blocked_kind unit_data_missing 로
  세워 빠졌다는 사실이 보이게 함.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 13:06:06 +09:00
eomsangdonandClaude Opus 5 036da3f9f9 refactor(B08): 인계 줄 파일 700줄 분리 — 준비공·배수관·연장·자재를 _Rows_Prep 로
777줄이던 _Handoff_Rows 를 565 + 255 로 가름. 줄의 모양은 안 바뀜 —
갈라낸 넷을 본체에서 다시 내보내 부르는 쪽 import 도 그대로임.
상태 낱말은 _Preparation_Status 한 벌에서 읽음.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 13:00:21 +09:00
eomsangdonandClaude Opus 5 5b97f280ba fix(B08): 표토 원문 대조 셋 + 준비공 파일 700줄 분리
원문·실무 대조에서 나온 것:
- 품셈 9-15-2(답외구간) 원문에 T(표토두께) 0.2m · L(운반거리) 20m 가 적용값으로
  박혀 있음. 종전 사유 「품셈이 정하는 값이 아닙니다」가 반쪽이라 정정 — 값을
  자동으로 넣지는 않되 원문에 있는 값을 없다고 말하지도 않음.
- 그 품에 20m 압토가 이미 들어 있음. 실무 내역서(영월 2024)도 「표토제거 답외구간
  / M2 · 도자 19Ton · D=20」 한 줄뿐이고 운반 줄이 따로 없음. 우리 운반 줄은
  20m 를 넘는 몫일 때만 새 줄인데 그 가름을 아직 안 함 — 사유로 남김.
- FP-10-12(덤프 운반)은 부모 코드라 품이 없음. 잎은 토사/암절취/발파암이고
  갈래를 안 보내면 B09 가 후보만 보이고 금액이 안 섬. 표토는 토사이므로
  variant_axis=ground_class · variant_value=토사 로 실어 보냄. 준비공 줄이
  갈래를 넘길 통로도 함께 엶(종전에는 늘 None).

파일 분리(700줄 제한):
- 부대시설 다섯 줄을 _Preparation_Ancillary 로, 상태 낱말을 _Preparation_Status 로
  가름. 상태 문자열은 받는 쪽 판정에 쓰이므로 두 벌이 되지 않게 한 벌만 둠.
  710줄 → 622 + 113 + 16.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:58:02 +09:00
eomsangdonandClaude Opus 5 f569cb8498 fix(B06): 화면 실측으로 잡은 사토장 흠 둘 — 지운 뒤 남던 값 · 가짜 경고
⚠ **시험만으로는 안 잡히던 자리임.** 실제 프로젝트에 사토장을 놓고 눈으로 본 뒤 잡음.

① **사토장을 지워도 값이 남음** — `enforce_spoil_fills` 가 **얹기만** 해서, 구조물을
   지운 뒤에도 저장분의 `spoil_fill_*` 가 그대로 남아 횡단도에 계속 그려지고 면적표에도
   섰음. ⇒ 사토장이 덮지 않는 측점에 **값이 남아 있으면** 사토장 없이 다시 계산해 지움.
   노선 성토도 그때 원래 값으로 돌아옴(사토장 몫을 빼 두었던 것이 복구됨).
   ⚠ **칸이 있는 것과 값이 있는 것은 다름** — 설계 결과는 사토장이 없어도 `0.0` 을 늘
     실으므로 「값이 남은」 측점만 되돌림(`_has_spoil_value`)
② **말풍선에 늘 뜨던 가짜 경고** — 「⚠ 0.0㎥ 는 못 담음」. 폭을 이분법으로 찾아
   400 − 399.9937 = 0.0063 이 남는 것이라, 표시 자릿수에서 안 보이는 몫은 경고 안 함

실측(프로젝트 fa76c162) — 지운 뒤 사토장 0 · 용량 null · 노선 성토가 정확히
「지우기 전 + 옮겨 갔던 몫」으로 복구됨(100m 1.7563+4.9217=6.678 …).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:57:34 +09:00
eomsangdonandClaude Opus 5 dd25bb0e19 feat(B09): 관부설 사유에 「인력 품만」과 커플링밴드 숨은 값을 적음
배수관 네 줄이 금액으로 섰으나 그 값은 **인력 품만**임 — 파형강관·커플링밴드·
크레인(5ton)·모래부설이 아직 안 붙음. 까닭이 둘로 갈림:
  · 관·모래 — 원문이 「별산」·「설계수량」이라 한 자리
  · 크레인 — 기계 카탈로그에 없음(9-9 목록에 올림)

 원문을 대조하다 **숨은 값** 하나 나옴 — 커플링밴드는 표가 비었으나 [주]① 이
「**1EA/6m**」를 줌. 자재가 서면 m 당 1/6 EA 로 셀 수 있음(「필요시 별도 산정」 조건 하나 더).

ⓘ 원문 특이점도 계획서에 적어 둠 — 배관공이 ∅800 0.25 · ∅1000 **0.22** · ∅1200 0.41 로
**가운데만 작음**. 크레인·보통인부는 관경이 커질수록 늘어남. **원문 그대로라 손대지 않음.**

검증: pytest 307 통과 · ∅800 0.25/8.0 = 0.03125 로 열 순서가 맞음을 원문과 대조

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:54:20 +09:00
eomsangdonandClaude Opus 5 ef5b9536c0 feat(B09): 관경이 표 밖이면 **무엇을 정해야 하는지**까지 가리킴
「품셈 표에 그 관경이 없음」만 적으면 사용자가 **엉뚱한 것을 정하러 감** — 정할 것이
단가가 아니라 **시설 선택**일 수 있음.

- 관부설 품셈 표가 다루는 관경은 ∅800·∅1000·∅1200 뿐임을 사유에 적음
- Ø1,500 이상이면 임도기술교본 3장을 가리킴 — 「BOX암거 적용 — 수리계산상 배수관
  **Ø1,500㎜ 이상** 적용 유역」(`횡단배수관_암거 §5`)
- ⚠ **단정하지 않음** — 그 §5 는 **교본 기준이지 법령·행정규칙이 아님**. 프로젝트 규칙이
  「기본값은 현행 법령·행정규칙, 교본은 과거 참조」라 **가리키기만** 하고 사유에 그 사실을
  함께 적음

검증: pytest 307 통과 · Ø1500 두 줄에 그 문구가 뜸

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:44:27 +09:00
eomsangdon 4f115c5bdf Merge remote-tracking branch 'origin/main_laptop_1' into main_desktop_1 2026-09-09 12:43:41 +09:00
eomsangdonandClaude Opus 5 f4f7136357 fix(B08): 준비공 축 감사 셋 — 면적 0 막음 · 표토 대상 어긋남 사유 · 규준틀 준용 표시
- 표토제거: 대상 면적 0 ㎡ 에 0 ㎥ 를 「값 있음」으로 내고 있었음. 0 은 「없음」과
  구별이 안 되고 받는 쪽이 「표토가 없는 노선」으로 읽음. 두께 미입력은 이미
  막고 있었는데 면적 0 만 통과하던 자리. 운반 줄은 제거를 밑수로 삼아 함께 막힘.
- 표토 대상 면적이 별표2 문언과 두 방향으로 어긋남 — 법은 「노면·절토대상지」인데
  우리는 절토·성토 사면적을 다 더하고 노면(연장 × 노폭)은 안 셈. 성토대상지는
  별표2 (7) 이 「제거·정리」로만 두어 운반·적치 의무를 안 검. 값은 그대로 두고
  사유로만 드러냄 — 실무 확인 사항이라 임의로 확정하지 않음.
- 비탈 규준틀 재료량이 「수평 값 준용」인 사실이 상수 주석에만 있고 화면 근거에는
  없었음 — 값이 서면 어디서 온 값인지 안 보이던 자리.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:42:46 +09:00
eomsangdonandClaude Opus 5 2972e4ccce refactor(B06): 횡단 설계 기하를 떼어 냄 — 924 → 522줄 (①/② 중 첫 조각)
TS 짝이 2026-09-04 에 이미 이 선으로 갈라 두었음(`common_util_cross_design_geometry.ts`).
**새로 긋는 선이 아니라 TS 에 있던 선을 파이썬에도 그은 것**이라 거울이 안 깨짐.

- `_SectionGeometry` + `_side_role`(TS `sideRole`) → `…_Engine_Design_Geometry.py`
- 안 옮긴 것 — 측구 방향 해석 · 지반 보간 · 사면 폐합 허용오차. **TS 도 본체에 둔 것들**
- 계산은 **한 줄도 안 바꿈**. 옮기기만 함

검증 — 거울 시험(횡단 설계선·단면적 두 쪽 대조) 통과. 전체 610 통과 / 22 건너뜀.
남은 것 — ② 표준값 해석·저장분 읽기 도우미 분리(522줄이라 급하진 않음).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:42:20 +09:00
eomsangdon 670310e3be Merge remote-tracking branch 'origin/sub_desktop_1' into main_laptop_1 2026-09-09 12:39:15 +09:00
eomsangdon d6e844104b Merge remote-tracking branch 'origin/main_desktop_1' into main_laptop_1 2026-09-09 12:39:15 +09:00
eomsangdonandClaude Opus 5 ed65eac74e feat(B08): 뒷채움 폭 근거 구간 밖이면 사유를 냄 — 높은 벽이 품셈 범위 아래로 감
정본 여섯 탭 전수 확인 구간이 H=1.0~3.0 인데 코드가 높이를 막지 않고
표준경사표는 직고 7m 까지 칸을 준다 — 높은 벽이 실제로 설 수 있음.
그 구간에서 막자갈 두께(= 물량 ÷ 비탈면적)가 0.375 ÷ √(1+경사²) 로 거의
붙박이라, 직고와 함께 두꺼워지는 품셈 13-4-4 [주]⑨ 범위보다 얇아짐
(H 3.0 0.359 안 · H 3.5 0.354 아래). 방향이 반대라 값만 보면 안 드러남.

값은 정본 식대로 세우고 막지도 눅이지도 않음 — 근거 구간 밖이라는 사실만
사유로 냄. 큰돌쌓기는 막자갈 줄 자체가 없어 이 갈림이 안 번짐.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:37:56 +09:00
eomsangdonandClaude Opus 5 36f47dcc8d feat(B05): 등록부 칸에 「비워 두는 것이 뜻」·「기본값의 까닭」을 값 옆에 적음
⚠⚠ **깨진 시험의 뿌리는 칸이 아니라 자리였음.** 정책 시험은 `tmp/tests` 라 **git 밖**이라
정본(추적됨)만 다른 창에 가고 예외 목록(추적 안 됨)은 안 따라감 ⇒ **다른 창에서만 깨짐.**
오늘 그 일이 두 번 났음. ⇒ **까닭을 값 옆(정본)에 두어 함께 움직이게 함.**

- 스키마에 칸 둘 신설
  · `empty_means` — **「비워 두는 것이 뜻인 칸」**(세 번째 갈래). 비면 계산 쪽이 기준값으로
    돌고 그 사실이 화면에 뜸. 값을 넣으면 그 값이 이김
  · `default_basis` — 기본값이 **도메인 확정값이 아닐 때** 그 뜻(「다단 없음」·「안 더함」).
    법정·확정 수치면 비워 둠 — 비어 있는 것이 「확정값」이라는 뜻
- 56곳에 까닭을 적음 — 전면 기울기 · 야면석 계수 · 채움 강도 · 비탈 기울기 · 물빼기 둘 ·
  개거 규격 · 뒷길이 · 돌 종류 / 단 수 · 올림 · 이동 · 조달 · 설치 측 · 추가 운반거리
- 정책 시험이 그 칸을 읽게 바꿈 + 까닭이 한 낱말이면 잡는 시험 둘 추가

⇒ 앞으로 등록부에 칸을 열 때 **예외 목록을 고치지 말고 까닭을 값 옆에 적을 것.**

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:37:50 +09:00
eomsangdon 007e016793 Merge remote-tracking branch 'origin/main_desktop_1' into sub_desktop_1 2026-09-09 12:35:33 +09:00
eomsangdonandClaude Opus 5 cc61dddefa fix(B09): 배수관이 금액으로 섬 — 차단 판정과 규격 열 표 둘을 고침
⚠⚠ **차단인지는 `blocked_kind` 가 정한다 — 문구가 아니다.**
배수관 다섯 줄이 `blocked_kind=None · in_bill=True` 인데도 **사유가 있다는 것만으로**
막혀 금액이 안 서고 있었음. 그 사유는 차단이 아니라 **주의 문구**였음 —
「관종을 안 정해 기본값(파형강관)으로 섰습니다」.
⇒ 사유만 온 줄은 **금액을 세우고 그 문구를 곁말(ⓘ)로** 닮. 차단 표시가 붙은 줄은 그대로 막음.
ⓘ 오늘 두 번째 같은 병임 — 아침엔 겹침 설명을 `blocked_reason` 에 넣었더니 막힌 줄로 읽혔음.

⚠ 그리고 막힘이 풀리자 **다음 벽**이 드러남 — 관부설 12-11 표를 한 줄도 못 읽고 있었음.
그 표는 **규격이 열**(∅800·∅1000·∅1200)이고 값이 **나눗셈 식**(「0.62/2.5」 = 관 2.5m
한 개당 0.62시간 ⇒ m 당 환산값)임.
- `match_spec_column_table` 신설 — 첫 줄이 규격 이름만 늘어선 표일 때만 내 표로 봄
- 「0.016/2.5/2」처럼 겹친 나눗셈도 읽음 · 값이 빈 칸(기초콘크리트·거푸집)은 건너뜀
- 관경마다 갈래가 섬. B08 이 「Ø800」으로 보내도 「∅800mm」 갈래에 붙음

결과 — 배수관 네 줄이 처음으로 금액이 섬
  Ø1000 10m × 10,903.7 = 109,037 · Ø800 11m × 10,973.0 = 120,703 ·
  Ø800 9m ×2 = 197,514  ⇒ 합 **427,254원**
  본체 31,118,251 → **31,545,505원**
  ⚠ Ø1500 은 품셈 표에 그 관경이 없어(800·1000·1200) 그대로 막힘 — 후보만 보임

검증: pytest 307 통과(신규 4) · 자원 축 547 → 565 줄

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:33:24 +09:00
eomsangdonandClaude Opus 5 db4acbf1ac fix(B08): 채움콘크리트 근거에 돌 종류 표시 + 골막이 주석 줄바꿈 복구
- 채움콘크리트 계수가 돌 종류로 갈리는데(깬돌 0.2 · 야면석 0.15) 근거 문구에
  종류가 안 적히던 자리 — 값은 바뀌는데 왜 바뀌었는지가 화면에 안 보였음.
  고임돌은 이미 적고 있었으므로 같은 규칙으로 맞춤.
- 병합 해결 과정에서 골막이 두께식 주석 두 줄이 한 줄로 붙은 것 복구.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:32:43 +09:00
eomsangdon 0662a90552 Merge remote-tracking branch 'origin/sub_desktop_1' into main_desktop_1 2026-09-09 12:22:08 +09:00
eomsangdon cc001166b5 Merge remote-tracking branch 'origin/main_laptop_1' into main_desktop_1 2026-09-09 12:22:07 +09:00
eomsangdon 11d1bf71a2 Merge remote-tracking branch 'origin/sub_laptop_1' into main_desktop_1 2026-09-09 12:21:55 +09:00
eomsangdonandClaude Opus 5 60e7e137bb feat(B07): 횡단도 하단표에 사토장 줄 — 「쌓기」와 갈라 보임
실무 원본 횡단도에는 그 자리가 **아예 없음**(400dpi 실측, 다른 창 확인) —
납품 양식을 늘리는 것이 아니라 **안 쓰던 빈 줄을 쓰는 것**임.

- 우측 그룹의 빈 줄 자리에 「사토장」 신설 (`spoil_fill`)
- 값은 B06 이 낸 `spoil_fill_area_m2` 를 그대로 옮김 — 여기서 더하거나 빼지 않음
  (`fill_area_m2` 에서 이미 빠져 있음 · 확정 ㉠ 같은 흙을 두 번 세지 않기)
- 사토장이 없는 측점은 값이 안 실려 종전처럼 빈칸

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:19:04 +09:00
eomsangdonandClaude Opus 5 8c88356459 feat(B05/B06): 흙막이를 기슭막이와 같은 벌로 — 형상·옵션 동일, 수량은 분리
사용자 확정 4차 원문 — 「흙막이는 횡단도에서 **표현방식들과 옵션들은 동일하게** 반영하면
될거야. **형상은 동일해.** 물론 **데이터는 분리하여 계산**되어야함.」

- 그리기 경로는 **이미 같음** — C군 벽은 `attachWallSpecs` 로 `section.revetment` 에 붙어
  기슭막이와 같은 기하를 탐(따로 그리지 않음). 형태 이름도 「찰/콘크리트」 글자로 갈려
  흙막이 선택지(돌(찰)·돌(메)·떼…)가 그대로 먹힘
- 빠져 있던 것은 **옵션 칸**이라 기슭막이 열두 칸을 **같은 글자 그대로** 옮김 —
  단 수 · 올림 · 이동 · 뒷길이 · 돌 종류 · 조달 · 야면석 계수 · 채움 강도 ·
  전면 기울기 · 기초 · 물빼기 구멍 둘
  ⚠ 흙막이 수량이 안 쓰는 칸도 **숨기지 않음**(사용자가 「동일하게」라 함) — 수량 쪽에서
    조용히 무시되면 됨
- ⚠ 코드에 **「형상 동일 ≠ 수량 동일」**을 못 박음. 원단위·공종코드·성분 줄은 흙막이 자기 것.
  반대 사례가 골막이임(그림도 수량도 다르고 두께식마저 다른 식) — **계열이 다르면 상수를
  나눠 쓸 것**

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:17:03 +09:00