Files
drawing3d-web/PROGRESS.md
T
오문성andClaude Haiku 5.5 9068b6c7f2 공개용 정리본: 1차 제출본(도면 좌표·과업명 제거)으로 새 이력 시작 (SPEC 34장)
- 정리는 코치 세션이 저장소 밖 도구로 수행, 하이쿠 세션이 커밋.
- 옛 81커밋은 로컬에만 보존. 기록은 evidence/gitlog_v1.txt.
- F13 기준 변경: .gitignore 에 private/*.dwg·private/full.dxf 제외 (SPEC 34장 끝 문장).
- check.sh 결과: 결과: PASS 151 / FAIL 0 / SKIP 3 (검사 범위 F01~F46)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-27 14:27:50 +09:00

60 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PROGRESS — 기능 1개 = 커밋 1개
한 줄 양식: `YYYY-MM-DD HH:MM | 기능 ID | 한 일 | check.sh 결과(PASS n / FAIL n) | 막힌 것`
- 2026-10-20 | KIT | 설계 키트 5파일 추가(SPEC·FEATURES·CLAUDE·check.sh·PROGRESS) | - | -
2026-10-20 13:45 | F01 | 골격: index.html(canvas 1, model.js→viewer.js) · model.js(mm, parts 빈 배열) · viewer.js(창 크기 맞춤, 배경 칠하기) | PASS 3 / FAIL 0 | -
2026-10-20 13:51 | F02 | 스파이크 1: viewer.js draw()에 고정 좌표 삼각형 하나를 path 로 채움 | PASS 4 / FAIL 0 | 수석 육안 확인 대기
2026-10-20 13:53 | F03 | 스파이크 2: viewer.js 에 facesBox·rotatePoint·project·shadeColor·sortFaces·draw, 등각 카메라, 시험 큐브 1개(한 변 2000) 를 면 음영·먼 면부터 그림 | PASS 5 / FAIL 0 | 수석 육안 확인 대기
2026-10-20 13:55 | F04 | 스파이크 3: viewer.js 에 onMouseDown·onMouseMove·onMouseUp 추가, 드래그로 yaw(좌우)·pitch(위아래, ±89도 제한) 를 바꾸고 draw 다시 호출. 등각 초기값은 기존 그대로 | PASS 6 / FAIL 0 | 수석 육안 확인 대기 (드래그 회전)
2026-10-20 13:56 | F05 | 휠 확대/축소: viewer.js 에 ZOOM(0.5~5)·onWheel 추가, 휠 한 칸 10%, draw 의 SCALE 에 ZOOM 곱함 | PASS 7 / FAIL 0 | 수석 육안 확인 대기 (휠 확대)
2026-10-20 14:24 | F06 | model.js 데이터: 벽체(ring alpha 0.25), 중간 슬래브 19장(1B~19B, 상면 z·두께 300·r 4850), 19B 패드, 하부 슬래브(20B), 바닥콘크리트 — SPEC 4.1~4.3 숫자 그대로, const MODEL = 순수 JSON | PASS 17 / FAIL 0 | 수석 확인 대기 (화면은 아직 모델 안 그림)
2026-10-20 14:25 | F07 | disc 그리기: viewer.js 에 facesDisc(32각형 뚜껑 2+옆면 32), buildFaces(disc 만), MODEL_CENTER·MODEL_R 로 처음 배율을 모델 전체에 맞춤, 시험 큐브 제거 | PASS 18 / FAIL 0 | 수석 화면 확인 대기 (모델 전체가 들어오는지)
2026-10-20 14:26 | F08 | ring 그리기: viewer.js 에 facesRing(바깥면·안쪽면·윗고리·아랫고리 각 32장), buildFaces 가 ring 도 모음, 벽 alpha 0.25 는 globalAlpha 로 적용 | PASS 19 / FAIL 0 | 수석 화면 확인 대기 (벽 너머 슬래브가 보이는지)
2026-10-20 14:27 | F09 | TBM 터널: model.js 에 tunnel 1개(pipe, 축 시작 x 4200.2·y -2425.0·z -65050, 330도, 길이 20650, r_out 1500, r_in 1300), viewer.js 에 facesPipe 추가 후 buildFaces 에 pipe 연결 | PASS 23 / FAIL 0 | 수석 확인 대기 (평면 4시 방향, 19B 높이에 붙었는지)
2026-10-20 14:29 | F10 | 계단 18런: model.js 에 stair 18개(SPEC 4.4, 단 수 17·마지막 14, dir 번갈아), viewer.js 에 facesStair 추가 후 buildFaces 에 연결, 디딤판마다 facesBox 블록 | PASS 28 / FAIL 0 | 수석 확인 대기 (층마다 계단 방향이 바뀌는지)
2026-10-20 14:31 | F11 | 터널 안 채움: model.js 에 fill 3개(잡석 -1300~-1175, 패드 2단 -1175~-1100, 패드 1단 -1100~-1050 폭 800), viewer.js 에 facesFill(원을 수평선으로 자른 단면을 축 방향으로 늘임) 추가 후 buildFaces 에 연결 | PASS 32 / FAIL 0 | 수석 화면 확인 대기 (터널 안이 19B 패드 높이까지 차는지)
2026-10-20 14:31 | F12 | README.md 작성: 구동 방법 3줄(index.html 더블클릭 · explorer.exe · Chrome/Edge), 조작법, 모델 설명(단위·구조물·데이터 파일), 검사 명령, 사용 도구(WSL2·Claude Code Haiku), wsl -l -v, 🔒 표기 | PASS 33 / FAIL 0 | 수석 확인 대기 (README 문장 검토)
2026-10-20 15:21 | F13 | 좌우 분할: index.html 에 #drawPane·#splitter·#viewPane, viewer.js 에 onSplitDown/Move/Up (폭 15%~85%), 캔버스는 #viewPane 크기에 맞춤, private/drawing.svg 없으면 안내 글자 | PASS 37 / FAIL 0 | 수석 화면 확인 대기 (막대 끌기, 3D 칸 크기 맞춰지는지)
2026-10-20 15:22 | F14 | 도면 확대·이동: index.html 에 #drawStage(img#drawing + svg#hotspots 443), viewer.js 에 fitDrawing·onDrawWheel(마우스 기준 0.5~40배)·onDrawDown/Move/Up, 처음 화면은 MODEL.drawing.fit 없으면 도면 전체 | PASS 39 / FAIL 0 | 수석 화면 확인 대기 (도면 휠·드래그, 처음 화면이 왼쪽 칸에 꽉 차는지)
2026-10-20 15:24 | F15 | 도면 클릭 연결: model.js 에 drawing 추가, sectionPoly·planPoly·buildHotspots·selectPart 로 부재별 클릭 영역, 선택 시 도면 노란 칠·3D 노란색·「선택: 이름」, 드래그 뒤 클릭 무시 | PASS 41 / FAIL 0 (F01~F15) | 수석 화면 확인 대기 (도면 영역 위치가 맞는지, 클릭·선택 해제)
2026-10-20 15:25 | F16 | 구동설명서.md 작성: 목적·기획(결정 6개)·범위·구동·조작·작업 방식·한계·이력(git log 표), 첫머리 🔒 | PASS 43 / FAIL 0 (F01~F16) | 수석 문서 검토 대기 (구동설명서 기획·한계 문장)
2026-10-20 15:26 | F17 | README.md 를 코드 설명으로 고쳐 씀: 파일 구조·실행·데이터·코드(함수 28개 한 줄씩)·그리기 방식·도면 연결·검사 (SPEC 11.2), 첫머리 🔒 | PASS 45 / FAIL 0 (F01~F17) | 수석 문서 검토 대기 (README 코드 설명 문장)
2026-10-20 15:29 | F18 | 구동설명서.md 를 _소거대기로 옮김(내용은 guide/ 8쪽에 있음), 3D 칸 「구동 설명서」 버튼 | 결과: PASS 50 / FAIL 0 / SKIP 0 (검사 범위 F01~F18) | 수석 화면 확인 대기 (guide 쪽 내용·버튼 위치)
2026-10-20 15:32 | F18 | 구동설명서 보완: guide/ 7쪽 pager 에 목차 링크 추가(목적·기획·범위·구동·조작·작업 방식·한계, 이력은 다음 자리 비움), 작업 방식·기획의 화면 확인 문장을 사실대로 정정(F02 이후 코치 localhost 미리보기, 더블클릭 구동은 수석) | PASS 50 / FAIL 0 (F01~F18) | 없음
2026-10-20 19:07 | F19 | tools/prep_drawing.py 작성, 원본으로 private/drawing.svg 재생성(1px 선, 커밋 안 함), viewer.js 의 applyDraw 를 applyDrawView 로 바꿔 width/height 확대 + translate 이동, README 함수 한 줄 추가 | PASS 54 / FAIL 0 (F01~F19, F20 SKIP) | 수석 화면 확인 대기 (도면 선이 확대해도 얇은지)
2026-10-20 19:11 | F20 | MODEL.drawing.views 11개(SPEC 13.2 표), viewHotspots·circlePoly·region·pathD 추가, 영역을 path 로 바꾸고 evenodd 로 벽 고리 구멍, selectPart 가 id 배열을 받음, 3D SELECTED 배열화, README 함수 추가 | PASS 56 / FAIL 0 (F01~F20) | 수석 화면 확인 대기 (그림 11장 클릭, 여러 부재 한 번에 선택, 「선택:」 글자)
2026-10-20 19:13 | F20 | 보완: 「선택:」 글자를 한 줄(nowrap)·오른쪽 120px 여백으로, 여럿일 때 「처음 둘, … 마지막」(SPEC 13.2) | PASS 56 / FAIL 0 (F01~F20) | 수석 화면 확인 대기 (홀수층 슬래브 선택 시 글자가 설명서 버튼과 안 겹치는지)
2026-10-20 19:15 | DOC | guide/ 9쪽을 사용 설명서로 다시 씀(index·purpose·run·control·plan·scope·limits·method·history, 수석 지시로 코치 세션 작성) | 결과: 문서만 변경, check.sh 안 돌림 | 수석 화면 확인 대기 (guide 9쪽)
2026-10-20 20:57 | F21 | model.js: 슬래브 19장·패드에 holes(SPEC 15.1 표), 계단 18런 x_top·dir·Y 띠 정정(15.2); viewer.js: facesDiscHoles 추가, buildFaces 가 disc 에 사용, draw 가 holes 를 evenodd 로 채움; README 함수 한 줄 | PASS 59 / FAIL 0 (F01~F21, F22·F23 SKIP) | 수석 화면 확인 대기 (슬래브 구멍 위치, 계단 입구 방향)
2026-10-20 20:59 | F22 | viewer.js: CAM.target 기준 project, panView(오른쪽 드래그·Shift+왼쪽), zoomAt(마우스 아래 점 고정, 0.5~40), resetView(더블클릭·처음 화면 버튼), contextmenu 막기, unrotateVector·scaleFor 추가; index.html 에 button#resetView; README 함수 추가 | PASS 62 / FAIL 0 (F01~F22, F23 SKIP) | 수석 화면 확인 대기 (오른쪽 드래그 이동, 휠 확대 40배, 더블클릭 복귀). guide/control.html 의 휠 0.5~5 줄은 아직 옛 값
2026-10-20 21:01 | F23 | 사람 애니메이션: buildWalkPath(계단 18런 내려갔다 되짚어 올라오기, 1000mm/s), walkerAt, facesPerson(상자 4개, 진행 방향에 맞춰 돌림, #ff8c1a), animate(rAF, 초당 30번 이하 다시 그림), setWalking; index.html 에 button#walkToggle; README 코드 절에 5개 함수 | PASS 65 / FAIL 0 (F01~F23) | 수석 화면 확인 대기 (사람이 계단을 오르내리는지, ▶/❚❚ 버튼, 다리 간격 100 해석 확인)
2026-10-20 21:05 | DOC | guide/ 7쪽(purpose·control·plan·scope·limits·method·history)을 F21~F23 에 맞춰 고침: 슬래브 구멍, 카메라 이동(오른쪽 드래그·Shift+드래그·휠 0.5~40·더블클릭), 사람 애니메이션(▶/❚❚) 반영. 수석 지시로 코치 세션 작성 | 결과: 문서만 변경, check.sh 안 돌림 | 수석 화면 확인 대기 (guide 7쪽 갱신분)
2026-10-20 21:12 | F24 | model.js: 월류벽 3·집수조·침사조 zone 2·사다리 1, 19B 슬래브·패드 침사구 구멍 (SPEC 16.1); viewer.js: facesPrism, facesZone, facesLadder 추가, buildFaces 가 prism·zone·ladder 를 받음; README 데이터 표·코드 절 추가 | PASS 70 / FAIL 0 (F01~F24, F25 SKIP) | 수석 화면 확인 대기 (월류벽 홈, 집수조·침사조 반투명 색, 사다리 위치·가로대, 19B 침사구 구멍). 사다리 폭 400·가로대 300 은 도면에 없는 코치 값
2026-10-20 21:15 | F25 | viewer.js: xSpan·planXY·bottomPlanPoly·bottomHotspots 추가, sectionPoly 가 xSpan 사용, buildHotspots 가 bottomHotspots 를 viewHotspots 뒤에 이음 (순서 집수조→침사조→월류벽→사다리); README 코드 절에 새 함수 4개 | PASS 71 / FAIL 0 (F01~F25) | 수석 화면 확인 대기 (단면 A-A·20B 평면에서 집수조·침사조 활꼴, 월류벽 홈, 사다리 클릭, 19B 평면 침사구 클릭 → 사다리 선택)
2026-10-20 21:19 | F26 | model.js: 벽 z1 −2000, topslab(disc r 5500, 원 구멍 2), neck 2(prism, 맨홀 목·원 구멍), elec 19개 슬래브 다각형으로 정정 / viewer.js: holePolygon(원→16각형), addHoles(facesDiscHoles 에서 분리), facesPrism 에 holes; README 데이터·코드 절 갱신 | PASS 74 / FAIL 0 / SKIP 8 (F01~F26) | 수석 화면 확인 대기 (상부 슬래브 뚜껑 원 구멍 2개, 맨홀 목 2개, 배선구 평행사변형). facesPrism 바깥 면 법선 부호가 반대로 보임(코드 읽기로만 확인, 화면 미확인) — F24 월류벽도 같은 함수
2026-10-20 21:20 | F27 | model.js: 분기구 obox 5, 환기 덕트·환기탑 obox 13 (SPEC 17.2 표 그대로, angle 167/0, cx=cy=0) / viewer.js: facesObox(facesBox 를 (s,t,z) 로 만들고 angle_deg 만큼 돌려 cx,cy 에 놓음, 법선도 돈다), buildFaces 에 obox 분기; README 데이터·코드 절 갱신(부재 72개) | PASS 77 / FAIL 0 / SKIP 5 (F01~F27, F28·F29 SKIP) | 수석 화면 확인 대기 (분기구가 167도 방향 옆 굴, 덕트가 남쪽으로 내려가 동쪽으로 꺾여 환기탑 연결, 환기탑 높이 지표 0)
2026-10-20 21:22 | F28 | model.js: 방호 난간 18장(railing, z·h 1100·paths), 펌프 배출관(pipe ring, 0,4220), 위쪽 사다리 2개(ladder_up) 추가 (SPEC 17.3) / viewer.js: facesRailing(꺾은선 구간마다 두께 40 판 6장) 추가, buildFaces 에 railing 분기 / README 데이터 표·부재 수 93개·코드 절 갱신 | PASS 81 / FAIL 0 / SKIP 1 (F01~F28, F29 범위 밖) | 수석 화면 확인 대기 (1B~17B 윗면 난간 높이 1100, 19B 패드 위 난간, 배출관 집수조→상부 슬래브 밑, 서쪽·가운데 사다리). 판 두께 40 과 난간 색 #d8c890 은 도면에 없는 코치 값
2026-10-20 21:24 | F29 | viewer.js: obox4 추가, xSpan 이 neck·obox 를 다룸, upperHotspots 추가(단면 A-A 사각형·평면도 원판 r 4850 → 맨홀 목 → 상자 바닥 윤곽), buildHotspots 순서 상부→벽·터널→바닥부 / README 함수 절 갱신 | 결과: PASS 82 / FAIL 0 / SKIP 0 (검사 범위 F01~F29) | 수석 화면 확인 대기 (단면 A-A 상부 슬래브·목·분기구·환기구·위쪽 사다리 클릭, 평면도 1·2 에서 원판·목·상자 클릭 후 벽 고리 클릭). 원판 평면 r 4850 은 SPEC 17.4 값(상부 슬래브 r 5500 과 다름), 코치 값 아님
2026-10-20 21:26 | F29 | viewer.js 보완: 분기구·환기구는 같은 kind 덩어리 전체 선택(upperHotspots 의 group, KIND_LABEL), 선택 문구를 kind 이름으로 (「선택: 평면도 — 분기구」「… — 환기구(강제)」), 목·사다리는 하나씩 | PASS 82 / FAIL 0 / SKIP 0 (F01~F29) | 수석 화면 확인 대기 (단면 A-A·평면도 1·2 에서 분기구·환기구 누르면 5개·13개 전체가 노랗게 되는지)
2026-10-20 21:28 | DOC | guide/ 사용 설명서 6쪽(purpose·plan·scope·limits·method·history) F24~F29 에 맞춰 갱신 (코치 세션 작성, 수석 사전 승인, SPEC 14장) / viewer.js·model.js 변경 없음 | PASS 82 / FAIL 0 / SKIP 0 (F01~F29) | 수석 확인 대기 (guide/ 6쪽 본문 검토)
2026-10-21 10:00 | F30 | model.js 변경 없음 / viewer.js: teamAt(t) 추가(첫 사람 t, 두 번째 t−TEAM_LAG 2000ms), facesPerson 에 색 인자(WALK_COLORS #ff8c1a, #e07010), draw 에서 두 사람 그림, walkerAt 음수 시각 접음 / README 사람 애니메이션 절 갱신 | PASS 82 / FAIL 0 / SKIP 4 (F01~F30 검사, F31·F32 범위 밖) | 수석 화면 확인 대기 (사람 두 명이 2초 간격으로 같은 길을 가는지, 시작 직후 두 번째 사람이 경로 끝에서 튀지 않는지)
2026-10-21 10:02 | F31 | viewer.js: stairProfile 추가(18.2 점 순서, 디딤판 300·챌판 200, s_b=(z_high−z_low−400)×1.5), facesStair 를 단면 Y 띠 압출(옆면 2 + 둘레 변마다 사각형)로 교체, 블록 방식 삭제 / README 함수 절 갱신(stairProfile 추가, facesBox·facesStair 설명 고침) | PASS 83 / FAIL 0 / SKIP 0 (F01~F31) | 수석 화면 확인 대기 (계단 18런이 경사판 밑면을 가진 콘크리트 계단으로 보이는지, 계단 아래 빈 공간·사람 경로와 어긋나지 않는지). 첫 점(0,z_high)→(0,z_high−200) 과 닫는 변이 s=0 에서 겹치는 것은 SPEC 18.2 점 순서 그대로 둔 것
2026-10-21 10:02 | F32 | guide/ 를 목차·목적·구동·조작 3쪽으로 정리: 코치 작성 index·purpose·run·control 그대로 커밋, plan·scope·limits·method·history git rm / README·index.html 변경 없음 (SPEC 18.3) | 결과: PASS 86 / FAIL 0 / SKIP 0 (검사 범위 F01~F32) | 수석 화면 확인 대기 (guide/index.html 목차 → 목적·구동·조작 3쪽 링크, 🔒 줄 없음)
2026-10-21 14:49 | F33 | tools/extract_from_dxf.py 추가: DXF 에서 벽·지표·슬래브 윗면 19·평면 구멍·난간 추출 (SPEC 20.1, 도면 좌표 코드에 없음) / model_extracted.js 생성 / README 파일 구조 두 줄 | PASS 89 / FAIL 0 / SKIP 9 (검사 범위 F01~F33) | 수석 확인 대기 (대조는 F34). 19B 침사구 구멍 1개는 20.1 규칙(오프닝·구조물 계단 레이어)에 안 잡힘 — F34 전에 판단 필요. 벽 z 는 19.1 고정값 -70200·-2000 사용
2026-10-21 14:50 | F34 | 대조 검사: 도구 쪽 검사 통과(model.js 변경 없음) / compare.html 추가(model_extracted.js 읽음, 「추출 데이터로 그린 화면」 글자) / viewer.js: MODEL.drawing 없을 때 hotspots·도면 로드 건너뜀 | PASS 98 / FAIL 0 / SKIP 0 (F01~F34) | 수석 화면 확인 대기 (compare.html 3D 칸이 index.html 과 같은 모양인지, 왼쪽 안내 글자)
2026-10-21 14:53 | F34 | 보완: viewer.js 계단 없으면 사람·버튼 숨김(HAS_WALK), MODEL.drawing 없으면 클릭 영역 안 만듦 / model.js·check.sh·SPEC.md 무변경 | PASS 98 / FAIL 0 / SKIP 0 (F01~F34) | index.html 의 <path> NaN 4개는 HEAD 에도 있던 것(수석 판단 대기, 이번엔 손대지 않음)
2026-10-21 14:55 | F29 | 보완: viewer.js xSpan 이 사다리를 kind 로 찾아 위쪽 사다리(kind ladder_up)가 NaN 이 되던 것을 type 으로 고침 (단면 A-A·A-A 생략 그림의 ladder_up_W·ladder_up_C 영역 4개, x0~x1) / FEATURES.json·check.sh·SPEC.md 무변경 | PASS 81 / FAIL 0 / SKIP 17 (검사 범위 F01~F29) | 수석 화면 확인 대기 (F12 콘솔 path NaN 오류 사라졌는지)
2026-10-21 19:32 | F35 | tools/extract_from_dxf.py: 계단 18런 추출 section_stairs·stair_profile·stair_dir·stair_parts (SPEC 21장, 도면 좌표·정답 값 코드에 없음) / model_extracted.js 다시 생성 / README 도구 설명 갱신 | 결과: PASS 100 / FAIL 0 / SKIP 0 (검사 범위 F01~F35) | 수석 확인 대기 (compare.html 에 계단·사람 두 명이 보이는지)
2026-10-21 20:05 | F36 | 정답지 좌표틀 정정 (SPEC 22장): model.js 표대로 터널·잡석·패드 0°·(4850,0), 상부슬래브 구멍·맨홀 목 2개 축 정렬, 분기구 197.3°, 환기구 30.3°, 위쪽 사다리 W 값 / 평면도 1·2 rot_deg -30.3 / viewer.js planXY·planPoly 회전 | 결과: PASS 103 / FAIL 0 / SKIP 0 (검사 범위 F01~F36) | 수석 화면 확인 대기 (compare·index 평면도 클릭 영역이 도면 그림 위에 놓이는지, 터널이 계단과 나란히 +X 로 가는지)
2026-10-21 20:11 | F37 | 터널 추출 section_tunnel·plan_tunnel·tunnel_parts (SPEC 23장, 도면 좌표·정답 값 코드에 없음) / inner_r 추가 / model_extracted.js 다시 생성 / README 도구 설명 갱신 | 결과: PASS 108 / FAIL 0 / SKIP 0 (검사 범위 F01~F37) | 수석 확인 대기 (compare.html 에 터널·잡석·패드가 계단과 나란히 보이는지)
2026-10-21 20:24 | F38 | 분기구·환기구 추출 (SPEC 24장): plan_center·frame_angle(φ 30.3 류, 도면에서 구함)·section_heights(A-A 좌측 X, B-B 우측 X)·branch_parts·vent_parts / model_extracted.js 다시 생성 / README 도구 설명 갱신 | 결과: PASS 113 / FAIL 0 / SKIP 0 (검사 범위 F01~F38) | 수석 화면 확인 대기 (compare.html 에 분기구·환기구·환기탑이 계단·터널과 맞물려 보이는지)
2026-10-21 20:37 | F39 | 나머지 부재 추출: top_slab_part·neck_parts(상부 슬래브·맨홀 목 2)·pad_and_sump(19B 패드·침사구)·bottom/lean(하부 슬래브·바닥 콘크리트)·weir_parts·pit_parts(월류벽 3·집수조/침사조) / 벽 높이를 도면에서 읽도록 고정값 제거 / 20B 평면 제목 추가 / model_extracted.js 다시 생성 / README 도구 설명 갱신 | 결과: PASS 124 / FAIL 0 / SKIP 0 (검사 범위 F01~F39) | 수석 화면 확인 대기 (compare.html 에 상부 슬래브·목·패드·월류벽·집수조가 맞는지)
2026-10-21 20:39 | F40 | 정답지 보강 (SPEC 26장): viewer.js facesLadder 에 angle_deg 회전(원점 기준, 법선 포함) / model.js 에 환기구 사다리 2개(ladder_vent_wall·ladder_vent_tower, kind ladder_vent) / .gitignore 에 __pycache__/ | 결과: PASS 126 / FAIL 0 / SKIP 0 (검사 범위 F01~F40) | 수석 화면 확인 대기 (index.html 에서 환기구 벽 사다리가 덕트 입구 벽에, 환기탑 사다리가 탑 안에 보이는지)
2026-10-21 20:42 | F41 | 설계 규칙 파일 tools/design_rules.json (🔶 부재 6개·style·ids) / extract_from_dxf.py 에 load_design_rules·apply_design_rules (부재 뒤에 🔶 붙이고 color·alpha 덮어씀) / model_extracted.js 다시 생성(95개) / README 도구 설명 갱신 | 결과: PASS 132 / FAIL 0 / SKIP 0 (검사 범위 F01~F41) | 수석 화면 확인 대기 (compare.html 에 사다리·배출관이 색까지 model.js 와 같게 보이는지)
2026-10-21 20:49 | F42 | 변환 패키지: tools/dwg_to_dxf.sh(dwg2dxf 래퍼)·tools/select_views.py(views.json 상자 안 객체만, 좌표 숫자 없음)·tools/make_model.sh(DWG→full.dxf→drawing.dxf→model_extracted.js, private/ 출력 시 루트 model_extracted.js 갱신) / README 「변환 패키지」 절 / 객체 3356개 확인 | 결과: PASS 138 / FAIL 0 / SKIP 0 (검사 범위 F01~F42) | 수석 확인 대기 (README 변환 패키지 절, make_model.sh 실행 결과)
2026-10-21 21:01 | F43 | DXF→SVG 변환 도구 tools/dxf_to_svg.py (SPEC 29.1) / 추출 도구 drawing_views 로 도면 연결값을 도면에서 계산 (SPEC 29.2, views.json 세 번째 인수) / make_model.sh 에 SVG 단계 / drawing_gen.svg·model_extracted.js 다시 생성 / README 갱신 | 결과: PASS 144 / FAIL 0 / SKIP 0 (검사 범위 F01~F43) | 수석 화면 확인 대기 (index.html 왼쪽 도면이 drawing_gen.svg 로 원본과 같은지, README 변환 패키지 절)
2026-10-21 21:04 | F44 | 화면 전환: index.html 이 model_extracted.js 를 읽음 / answer.html 신설(정답지, model.js) / viewer.js 가 MODEL.drawing.src 로 도면을 읽고 없으면 그 경로 안내 / README 첫 화면·정답지·다시 만들기 갱신 | 결과: PASS 150 / FAIL 0 / SKIP 0 (검사 범위 F01~F44) | 수석 화면 확인 대기 (index.html 이 도면에서 만든 모델인지, answer.html 이 예전 정답지인지)
2026-10-21 21:08 | F45 | README 「사용 도구」 절 복원 (SPEC 31장): wsl -l -v 출력은 8f606f5 에 기록된 값을 그대로 옮김 (WSL 안에서 wsl.exe 호출 불가) / Haiku 5.5·LibreDWG·git·브라우저 / 커밋 메시지 Co-Authored-By 줄 | 결과: PASS 151 / FAIL 0 / SKIP 0 (검사 범위 F01~F45) | 수석 확인 대기 (README 사용 도구 절의 wsl 출력이 지금 Windows 값과 같은지)
2026-10-22 09:23 | F46 | WSL2 설치 증빙: evidence/wsl2.txt 에 WSL 안쪽 출력(uname·/proc/version·Ubuntu 26.04·claude 2.1.304·git·python3·dwg2dxf) 덧붙임 / README 사용 도구에 설치일 2026-07-09 와 증빙 파일 연결 | 결과: PASS 154 / FAIL 0 / SKIP 0 (검사 범위 F01~F46) | 수석 확인 대기 (evidence/wsl2.txt 의 Windows 쪽 설치일·WSL 안쪽 출력이 맞는지)