㉘ 자기 감사. B09 에 겨눈 네 축을 내 것에 그대로 겨눔.
안 부르던 검사 — 시험에서만 불리고 있던 것들을 실제 경로에 이음
- verify_no_code_on_materials · verify_bill_flags → build_handoff 결과에 실음
- check_against_plan → 운반 표 옆에 haul_check 로 실음 (계획이 있을 때만)
- 바로 위 주석이 「검사는 실제로 부른다」였는데 형제 둘이 놀고 있었음
표토 두께 — 서버·엔진은 받고 있었는데 화면에 넣을 칸이 없었음
- optionalNumberField 신설 (빈 값 = 「안 정함」, 0 과 구별)
- null 을 저장에서 버리던 것 수정 (NULLABLE_SETTING_KEYS) —
한 번 넣으면 「안 정함」으로 못 되돌리던 자리
짝 시험 — 규칙은 있는데 시험이 없던 둘
- REFERENCE_MARKS (41건을 지웠던 그 규칙): 기준표는 잡고 「단 위」는
안 잡는 것을 양쪽으로 박음
- attachments_of: 칸이 있을 때만 줄이 서고 부모와 id 가 갈리는 것
시험: 662 passed · 24 skipped (B05 코리도 1건 기존 깨짐, 무관) · tsc 오류 0.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
㉕ 통과(엔진 실행)에서 잡힌 것.
- 준비공 사방공 줄에 개발자 키(`soil_guard`)가 그대로 뜨던 자리 수정.
레지스트리 이름을 받아 쓰고, 키는 `type_id` 칸으로만 오감.
문구표에 사방 시설 이름 넷 추가(레지스트리 값 그대로 옮긴 것).
- 좌측 「토사」 비율 칸 제거 — 넣어도 버려지던 죽은 칸.
토사 물량은 토적표 값이 그대로 서고, 비율은 암 총량을 갈래로 나눌 때만 쓰임.
- 안분 안내 문구를 「암 갈래 입력 합 …」으로 명시.
칸에 100 을 채운 사용자에게 「입력 합 60 %」로 뜨던 자리.
- 항목 라벨을 「암 갈래 구성비(%) — 암 총량 기준」으로 바꿈.
시험: 655 passed · 24 skipped (B05 코리도 1건 기존 깨짐, 이 변경과 무관).
사방공 이름 시험 2건 추가, 키를 화면 이름으로 못 박던 옛 시험 1건 정정.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
㉓. ㉒ 에서 원문을 찾아 닫힌 셋을 구현.
- **비탈 규준틀 개소** — 품셈 11-2 [주]① 「비탈길이 10m 이상 20m마다 설치」.
사면표의 측점별 사면길이·거리로 셈. ⚠ 「10m 이상」은 비탈길이 조건이고
「20m마다」는 노선 거리 간격이라 둘을 안 섞음. 재료량은 [주]④ 「설계수량」이라
개소만 내고 재료는 미확보로 둠.
- **수평 규준틀**은 11-3 [주]① 이 「중심점 성토고 5m 이상」인데 성토고가 사면표에
없어 0 으로 때우지 않고 미확보로 둠.
- **목재틀흙막이 갈래** — 품셈 13-13-1 [주]③ 이 재료 구성으로 가름.
임도 흙막이는 「보통구조 상(통나무 기슭막이)」로 잠정 판정. ⚠ 잠정임을 근거
문구에 드러내고 「상등구조를 쓰면 8.760 → 16.975 인/㎥ 로 약 1.9배」를 함께 적음.
갈래표는 데이터 파일(`resources/data_timber/`)이라 줄만 더하면 늘어남.
⚠ 밑수 1㎥ 는 구조물 체적이 아니라 **목재 채적**임을 데이터에 명시 — 그래야
「1㎥에 건축목공 17인」이 말이 되는지 판단됨.
- **표토제거 두께** — 9-15 [주]② 가 「T : 표토두께(m)」로 공식의 입력 변수로 둠.
품셈이 정하는 값이 아니므로 설계 입력 칸(`quantity.topsoil_thickness_m`)으로 냄.
⚠ 기본값 없음 · 미입력이면 물량 안 냄(0 으로 때우지 않음). 대상 면적은 참고로 보임.
검증 — 준비공 16건 통과, 전체 642 passed.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
타설 방식 — 「무엇을 정해야 하는지」만으로는 부족하고 「정하면 얼마나 달라지는지」가
보여야 사용자가 판단함. 세 방식 단가 차이가 6배라 조용히 기본값을 쓰면 총액이 갈림.
- 방식 이름을 늘 값 옆에 보임(「적용 중: 레디믹스트 (기본값 — 확인 필요)」).
코드(12-01-01)만으로는 무엇을 쓰는지 모름.
- 참고 단가 세 줄을 안내로 띄움 — 레디믹스트 65,826 · 기계비빔 163,508 ·
인력비빔 408,327 원/㎥. ⚠ **표시 전용**이며 B08 의 어떤 계산에도 안 들어감
(금액은 B09 몫). 출처·산출일을 데이터에 함께 적음.
품셈 마스터 — 값 자리에 식이 적힌 칸에 깃발(`expression_cells`).
`0.2 × 30%`(기초잡석 소할)처럼 계산이 그대로 적힌 칸은 값이 숫자로 안 읽혀
그 성분이 조용히 빠짐. 형태 판정은 통과하고 배분율 딱지도 없어 아무 검사에도
안 걸리던 자리(서브 창이 실물에서 부딪힘 — 기초잡석이 부설다짐 0.6인만으로 섬).
⚠ 식을 계산하지 않고 드러내기만 함 — 뜻을 잘못 읽으면 조용히 틀림.
31표에서 잡힘(9-12·9-13 터파기 계열 · 12-24 뒷채움 · 12-25 기초잡석 등).
검증 — 품셈 34건 통과, 전체 588 passed, tsc 오류 0.
화면에서 방식 이름·기본값 표시·단가 세 줄 확인.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
목록에만 있고 화면에 없으면 사용자는 그것이 잠정인 줄도 모름. 셋 다
「지금 어떤 값으로 돌고 있는지 + 왜 잠정인지」를 함께 보임.
- 콘크리트 타설 방식을 좌측 패널 칸으로 냄. ⚠ 금액에 바로 걸리는 값이라
기본값으로 돌고 있으면 「기본값 「레디믹스트」로 계산 중 — 아직 안 정한 값」
안내를 띄움. 설정 기본을 None 으로 바꿔 「안 정함」과 「일부러 레디믹스트를
고른 것」을 가름 — 값을 미리 넣으면 그 구별이 사라짐. 되돌리기도 됨.
- 물구멍 근거에 잠정값을 적음 — 「관 Ø 미정(법 3~6㎝ / 실무 Ø50) ·
간격 2.0㎡당 1개소(법 2~3㎡당 1개소 이상)」. 「미확정」만으로는 무엇을
정해야 하는지 모름.
- 준비공의 벌목 줄에 공종 미확정 사유와 후보를 함께 적음(수확베기·단목베기·
위험목 베기 중 어느 것인지 원본이 말하지 않음).
검증 — 전체 580 passed, tsc 오류 0. 화면에서 셋 다 뜨는 것과 타설 방식
저장·되돌리기까지 확인 후 검증으로 바꾼 값은 원래대로 복원.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
⑬ 운반 사슬 실증 중 발견. 정본에 저장되는 것은 유토곡선 한 벌(`mass_haul`)이고
배분은 그 안의 `haul_plan` 인데, 라우터가 바깥 껍데기를 그대로 넘기고 있었음.
`blocks` 를 못 찾아 운반 표가 항상 빈 표가 됨. [확정] 전에는 어차피 빈 표라
화면에서 티가 안 나던 자리임.
검증은 사용자 프로젝트를 건드리지 않고 서버 계산 코드(Node 번들)를 시험 노선으로
직접 돌려 실제 배분을 받아 확인함.
- 운반거리 표: 무대 3.90㎥/10m · 도자 7.80㎥/40m · 덤프 3,712.29㎥/288.12m
- 인계: 무대 in_bill=false + 수량 그대로, 도자 FP-10-11 · 덤프 FP-10-12
- 검산: 합 3,723.99 vs hauled 3,724.00 (차 0.01 — 배분 자체의 반올림)
- 장비 한계: 무대 20m · 도자 60m 이내 확인
저장 정본 모양을 그대로 넣은 시험 2건으로 못 박음.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
⑪ 준비공·사방공 — 자리를 만들되 없는 값을 지어내지 않음.
- ⚠ 벌목은 값을 안 냄. 토공집계의 「지장목제거」로 이미 서 있어 또 세우면 같은
나무를 두 번 벰. 참고 면적만 보이고 「다른 표에서 이미 섬」으로 가리킴.
- 못 서는 줄에 사유를 적음 — 표토제거(두께·구간 미정) · 제근(입목 본수 없음) ·
규준틀(개소 기준 미정). 공종코드는 미리 적어 둠.
- 사방공은 레지스트리의 실제 type_id 로 봄. 없으면 「해당 없음」 — 0 을 적지 않음.
이름을 지어내면 영영 안 걸리므로 레지스트리와 대조하는 시험을 둠.
⑫ 최종 점검 — 탭 6장 전수를 실화면에서 돌려 값으로 서는 것 확인
(토적표 65측점 · 토공집계 10줄 · 운반거리 안내 · 준비공 5줄 · 구조물 원단위 10줄 ·
자재총괄 4줄). 전체 566 passed, tsc 오류 0.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 암 시공법(ripping/blasting)을 갈래 비율 칸 아래에 붙임. 갈래 이름만으로는
품셈 공종(암절취 FP-09-04 / 발파암 FP-09-05)을 못 고르던 자리. 기본은
「안 정함」이고, 안 정하면 인계에서 사유와 함께 드러남. 비율 미입력 상태의
「암」 한 줄에도 칸을 냄.
- 관급/사급은 표 안에서 줄마다 고름. 관급 줄에만 설치주체가 열리고 사급으로
되돌리면 잠기며 비워짐. 만진 줄은 표시가 남음.
- 산출 요약(최소·중앙·최대)을 원단위·자재총괄·인계에 붙임. 단위별로 갈라 냄 —
값이 있기만 하면 시험이 못 잡는 자릿수 어긋남을 사람이 훑게 하는 장치.
화면에서 걸려 고친 것 둘
- 관급을 골라도 설치주체 칸이 잠긴 채 남던 것. 고른 즉시 열고 닫게 함.
- 한 번 고른 시공법을 되돌릴 길이 없던 것. 설정 저장이 병합이라 빈 값을 보내도
옛 값이 남았음. `save_section(replace_keys=…)` 로 되돌릴 수 있어야 하는 칸만
통째로 갈아 끼움. 나머지는 그대로 병합.
앞 커밋에서 온 타입 오류 2건도 고침 (`slopeColumnCount` 미사용,
`variant: "outlined"` 는 없는 값). 앞선 확인에서 npx 가 엉뚱한 패키지를 실행해
「오류 없음」으로 잘못 봤음 — tsc 는 config/node_modules 것으로 부를 것.
검증 — 새 시험 5건 + 인계 28건 통과, 전체 509 passed. tsc 오류 0.
화면 실조작으로 시공법 저장·되돌리기, 관급/설치주체 저장·되돌리기 확인 후
검증으로 바꾼 값은 원래대로 복원.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
일감 4·5 의 API 덩어리.
한 응답에 실음
earthwork-table 이 토적표(체적) · slope(사면 4계열) · haul(운반 가중평균) ·
summary(토공집계표) · settings 를 함께 냄. 실무 산출서가 한 벌로 움직이는 값이라
나눠 부르면 같은 측점 목록을 여러 벌 들게 됨.
운반계획이 없으면 빈 표가 정직함
운반계획은 [저장]·[확정]에서 정본에 남는 값임(longitudinal.data.mass_haul).
아직 안 돌린 프로젝트는 없음 — haul_available 로 알려 화면이 「확정하면 생김」을
말할 수 있게 함. 지어내지 않음.
산출 조건 저장 — PUT /quantity/settings
⚠ 자동저장이 아님(CLAUDE.md 5장). 조작은 캐시에 쌓이고 여기서만 작업본으로 넘어감.
⚠ quantity 구획만 씀 — estimation 은 B09 것이고 모듈이 구조로 막고 있음.
보내지 않은 칸은 저장분을 그대로 둠.
프로젝트 경로를 못 찾아도 조회는 기본값으로 서게 함 — 설정은 계산을 거드는 값이지
없으면 못 도는 값이 아님.
암 비율 안분을 비고에 드러냄 (조율 창 지적)
설계자가 60/30 을 넣으면 총량 보존을 위해 66.7/33.3 으로 안분됨. 값이 말없이
바뀌는 것이라 「입력 합 90 % → 100 % 로 안분」을 비고에 남김. 합이 100 이면
비고를 비움 — 제대로 넣었는데 안내가 뜨면 잡음이 됨.
검증 — 회귀 433 passed (실패 1건은 B05 코리도 기존 깨짐).
엔드포인트 3종 등록 확인(earthwork-table 2 + settings 1).
안분 비고는 시험으로 못 박음(합 90 이면 비고 있음 · 100 이면 없음).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
일감 3 의 API·화면 덩어리. 토적표 오른쪽 절반(실무 V~AI)이 화면에 섬.
한 응답으로 냄
실무 토적표가 한 장이라 화면도 한 장임. 나눠 부르면 두 번 왕복하고 같은 측점
목록을 두 벌로 들게 됨. earthwork-table 응답에 slope 를 함께 실음.
열 구성 — 계열 4 x 성토면/절토면 = (거리, 면적) 7쌍
층따기[성토면] · 면고르기 · 법면보호공(종자파종) · 지장목제거.
거리 = 그 측점 사면길이, 면적은 토적표와 같은 평균단면적법.
합계행은 면적만 — 거리(사면길이)는 합이 뜻이 없음(실무 시트도 비움).
⚠ 잘린 측점을 감추지 않음 (PLAN 8-4b)
사면이 원지반을 못 만난 측점은 사면길이·면적이 그 지점에서 잘려 있음.
경고 문구에 **무엇이 잘렸는지**를 적고(「실제 값은 이보다 큼」), 측점 단추를
누르면 그 줄로 가서 잠깐 강조됨 — 17곳을 눈으로 찾게 하지 않음.
잘린 줄은 측점 칸 왼쪽에 표시가 남음.
검증 — 공용 브라우저 실화면. 타입검사 오류 0.
머리글 3단 13/12/28셀, 대분류에 층따기·면고르기·법면보호공·지장목제거,
3단에 거리/면적 쌍. 본문 65행 x 34열(토공 20 + 사면 14).
NO.1 사면값 6.4/64.4 · 3.5/93.0 등이 엔진값과 일치.
잘린 줄 17개 표시 · 경고 문구 · 측점 단추 17개 확인.
합계 면고르기 성토 13,518.6㎡ · 절토 5,433.7㎡ 로 엔진 합계와 같음.
회귀 404 passed (실패 1건은 B05 코리도 기존 깨짐).
조작한 화면은 사용자가 보던 주소로 되돌려 놓음.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PLAN 8-4b 열 명세대로. B06 이 이미 낸 측점별 단면적을 다시 재지 않고
체적화만 함 — 새 수량을 낳지 않으므로 캐시·조작 경로 불필요(CLAUDE.md 5장).
열 구성 (실무 토적표 = 오솔길 1.BOM 36열과 1:1)
측점·거리·절토[토사·암 각 단면적/입적/보정량]·측구터파기[토사·암 각 3칸]
·보정량계·성토[단면적/입적]·유용토·차인토량·누가토량.
사면 계열(층따기·면고르기·법면보호공·지장목제거)은 사면길이가 아직 없어 일감 3.
계산 규칙
체적 = (앞 단면적 + 현 단면적)/2 x 거리. 첫 측점은 앞이 없어 체적 없음.
보정량 = 체적 x 다짐 환산계수 — 정의처는 EARTHWORK_CONVERSION_FACTORS 한 곳,
여기서 값을 다시 적지 않음(토사 0.90 / 리핑암 1.15 / 발파암 1.30).
값을 자르지 않음 — 품셈 1-2-2 는 표기 규칙이고 절사는 화면 몫(PLAN 8-16).
원가 쪽(줄마다 원 단위 절사)과 규칙이 반대라 섞지 말 것.
TODO(미결 · PLAN 8-4b) — 설계가 측구를 토사·암으로 안 나눠 줌(ditch_area_m2 한 값).
잠정으로 그 측점 절토 토사:암 면적비로 안분함. 측구는 절토부에 파므로 같은
지반을 만난다는 것이 근거. 설계가 측구 지반을 따로 내면 _split_ditch 만 교체.
API — GET /api/projects/{id}/quantity/{route_id}/earthwork-table,
경로 생략형은 워크플로 최신 노선으로. main.py 는 자기 두 줄만 추가.
검증 — tmp/tests/test_b08_earthwork_table.py 14건 통과.
거창 실무 BOM 실측값 재현(단면적 1.89 → 체적 9.45 → 보정 8.505,
다음 측점 18.10 → 16.29, 측구 0.18㎡ → 10m당 1.80 → 1.62).
공용 브라우저에서 실 API 호출로 route 150·측점 65곳 확인 — 측점 20 에서
(0.2723+1.9615)/2x20 = 22.338, x0.9 = 20.1042, 암 25.427 x1.15 = 29.24105,
측구 안분 0.0784+0.1016 = 0.18 로 전건 일치.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>