Files
Aislo/docs/raw/plans/2026-10-10_plan_244-248.md
T

58 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.
# 2026-10-10 계획 244 · 246~248장 기록 — 거리이정표 · 설계내역서 메뉴 · 초록 램프 · 다른 탭 빨강
근거 = `docs/raw/요구_1010_2/사용자요구_1010_2.md` 120 · 128~147 · 조사 AH.
## 244. B08 수량산출 · 메인 탭 「거리이정표」 (sub8)
정함 = 사용자 120번 + 120-답 · 조사 AH · 브이월드는 길찾기 API 없음(공개 목록에 없음) → 길찾기 = 카카오모빌리티 길찾기 REST(키 = 사용자 발급 · 오기 전엔 km 손 입력) · 그림 = 서버가 VWorld 바탕 + 길 선(이미 쓰는 VWorld 길) + 사진 올리기
- 짜임: 메인 탭 「거리이정표」 → 하위 탭 [거리이정표](다이어그램 + 표) · [경로 하나씩](컨테이너 하나 = 그림 하나 + 구간 km) · [+ 추가] · [삭제]
- 공사지 = 시점(노선 첫 점) + 중점(사용자 입력 측점 · 기본 = 노선 길이 ÷ 2) 한 컨테이너 · 기준점 = 있거나 없음(예 병곡리 968-31)
- 다이어그램 = 컨테이너(상자) 로 추가 · 고침 · 상자 자리 방향 = 기준점(없으면 공사지) 기준 지도 방위 · 선마다 구간 km · 도로 구분
- 도로 구분 = 구간(기점)마다 드롭다운(2차포장 · 1차포장 · 비포장) 사용자 고름 · 자동 판정 없음
- 표 = 항목(수기) · 업체 이름(수기) · 목적지(시점 · 중점 등 고름) · 도로 구분 km(2차포장 · 1차포장 · 비포장) · 계(포장 · 비포장 · 합계) · 비고 — 견본 수식(포장 = 2차 + 1차)
- 항목 추가 = 구분 정보 + 지도 위치(주소 검색 → 좌표) + 길찾기 값(km · 길 선)을 받음
- 정본 = 프로젝트 storage B08_Quantity/milestone/(json + 경로 그림) · 표 합 = 파이썬 · TS 짝 · 주소 · 길찾기 · 그림 = 서버 단독
- [x] 244-1 데이터 · 라우터(GET · PUT) · 메인 탭 · 하위 탭(추가 · 삭제) · 공사지(시점 · 중점) · 표(구간 드롭다운 · 합 짝) · km 손 입력 · 사진 올리기 — 새 시험
- 검증완료 — test_244_1 6건(견본 거창군청 2차 23.8 + 1차 0.6 + 비포장 0.8 = 포장 24.4 · 합계 25.2 · 중점 목적지 = 노선 ÷ 2 비포장 더함 · TS 거울 같음 · 중점 기본 1500 m 노선 → 750 · 저장 왕복 · 그림 교체 · 지우기 · 경로 삭제 뒤 [저장] = 그 그림 지움 · 겹친 id 422) + B08 관련 · 243_1 · 122 통과(203) · typecheck · prettier · ruff
- [x] 244-2 다이어그램(컨테이너 · 방위 자리 · 선 · km · 도로 구분 · 상자로 추가 · 고침) — 새 시험
- 검증완료 — test_244_2 6건(공사지 컨테이너 안 시점 왼 · 중점 오른 · 선 「비포장 0.75km」 · 8방 자리 E = 오른 · N = 위 · 기준점 W = 공사지 서쪽 · 거창군청 N = 기준점 북쪽 · 선 글 「2차포장 23.8km」 · 「1차포장 0.6km」 「비포장 0.8km」 · 경위도 동쪽이면 고른 N 보다 동 · 같은 방위 둘 = 옆으로 64 · 안 고름 = 빈 방위 북 → 북서 · 상자 안 겹침) + B08 관련 · 243_1 · 244_1 통과(209) · typecheck · prettier · ruff
- [x] (244-4 로 바뀜 · 130번) 244-3 지도 위치(주소 → 좌표 · VWorld 지오코더) · 경로 그림(VWorld 바탕 + 길 선) · 길찾기(카카오 REST · 키 있을 때만 · 없으면 안내 한 줄) — 새 시험
## 246. B09 설계내역서 — 입력 칸 테두리 되돌림 · 우클릭 「항목 추가」 하나 · 연결 이름 줄임 · 「줄 삭제」 (sub3)
정함(브레인) = 사용자 128번 · ① 241 · 243 입력 칸 테두리(글 상자 테두리 · td 늘 테두리)를 241 앞 모양으로 되돌림(더블클릭 입력은 그대로) ② 우클릭 「위에 줄 추가」 · 「아래에 줄 추가」 · 「아래에 하위 줄 추가」 · 「새 공종 추가(1단)」 → 「항목 추가」 하나(누른 줄이 항목 = 바로 아래 같은 레벨 · 폴더 = 그 폴더 첫 하위 · 1단은 레벨 단추 · 방향키로) ③ 연결 메뉴 이름 = 「구조물 조합」 · 「일위대가 사전조합」 · 「단가산출」(서고 · 마스터 · 회사 · 개인 · M01 · 새 산근 글 지움 · 호표 둘은 그대로) ④ 「줄 지우기」 → 「줄 삭제」
- [x] 246-1 네 가지 — 시험 기대값 · 새 시험
- 검증완료 — test_246_1 3건(입력 칸 accent 5% 채움 · box-shadow · is-can-edit 없음 · 줄마다 더함 = 「항목 추가」 하나 · 「줄 삭제」 · 연결 이름 다섯(서고 · 층 · M01 · 새 산근 글 없음) · 알림 글 서고 없음 · 안내 글 · 폴더 = 첫 하위 · 항목 = 바로 아래 같은 부모 · ← 한 단씩 · 관급 안 손 묶음 ← = 새 공종 직접비 · 관급자재대 앞 · 자재 줄 1단 막음 · 1단 손 항목 = 묶음) + 241_1 · 243_1 · 166_2 · 182 · 184_3 · 204_2 기대값 고침 · 204_1 · 235_1 · 200_2 · 240_1 · 236_1 · 202_1 · 201_1 · 121 · 242_1 · 245_1 통과 · typecheck · prettier · ruff
- [x] 246-2 (129번) 우클릭 「연결 ▸」 = 같은 패널 안에 펼침 대신 오른쪽 옆 새 판(하위 메뉴)으로 연결 다섯(일위대가 호표 · 단가산출 호표 · 구조물 조합 · 일위대가 사전조합 · 단가산출) · 공용 우클릭 메뉴 children 꼴 · 화면 끝이면 왼쪽으로
- 검증완료 — test_246_2 2건(「연결 ▸」 한 줄 · 올림 = 옆 판(메뉴 오른쪽 260 · 첫 줄 = 머리 줄 높이 · fixed) · 다른 줄 올림 · ← = 닫힘(머리로 초점) · 누름 · → = 열고 첫 줄 초점 · 고름 = 닫고 동작 · 오른쪽 끝 = 메뉴 왼쪽 · 아래 끝 = 올림 · Esc · 바깥 누름 = 닫힘 · 안 누름 = 그대로 · 옛 아코디언 없음) + 129(B05 구조물 메뉴) 통과 · 영향 = 공용 메뉴 children 쓰는 곳 모두 옆 판(B09 연결 · B05 종단 · 배수 구조물군 · 스프레드시트 칸 메뉴 붙여넣기 · 삽입 · 삭제 · 고정 · 그룹 · 시트 탭 숨김 해제)
- [x] 244-4 (130번 고침) ① 공사지 [+] = 모달(항목 · 업체 이름 · 목적지 + 아래 주소 검색 · 등록되면 그 자리 지도) · 방위 = 지도 위치로 자동 자리(고르기 없앰) · 주소 검색 · 지도 = B02 프로젝트 등록 · B01 회사 주소(geocode · 후보 검색 · 지도 미리 보기) 재활용 ② 시점 상자 누름 = 모달(프로젝트 등록 때 주소 · 브이월드 주소 · 아래 지도) ③ 다이어그램 영역 팬 · 줌 = 공용 A00_Common/b_svg_zoom_pan.ts ④ 경로 하위 탭 = 길찾기 지도 결과만(구간 표 · 표 줄 · 하위 탭 [추가] 단추 없앰 · 탭은 항목 추가 · 삭제로만 생기고 없어짐) · 길찾기 API 없으면 [다음 지도에서 길찾기] = 새 창 map.kakao.com 길찾기 주소(출발 · 도착 좌표) → 사용자가 길 확인 → [화면 캡처](getDisplayMedia 로 그 창 한 장) → 그 탭 그림 ⑤ 상자 누름 = 그 항목 정보 모달(탭 이동 아님 · km · 도로 구분 · 고침 · 삭제는 모달 안) ⑥ (130-6) 다이어그램 선 위 km · 도로 구분 글을 다이어그램에서 바로 고침(더블클릭 = km 글 상자 · 도로 구분 ▾ · 모달과 한 벌) — 새 시험
- 검증완료 — test_244_4 6건(업체 좌표 = 방위 자동 · 기준점 좌표 없음 = 시점 기준 남 · 있음 = 기준점 기준 북 · 다음 지도 /link/by/car/이름,위도,경도 꼴 · 이름 쉼표 · 빗금 = 빈칸 · VWorld getAddress 도로명 먼저 · 지번 · 깨진 응답 None · site-address = 사업지역 · 시점 · 중점 주소 · [+] 모달 칸 · 방위 칸 없음 · B01 주소 칸 재활용 · 공용 팬 줌 · 경로 탭 표 없음 · 새 창 · getDisplayMedia → 그림 올리기 · 선 글 고침 = 업체 23.8 · 공통 비움 · 중점 1.2345 km = 측점 1234.5 m · 표 1차 23.8) + 244_1 · 244_2 · 243_1(B08 표 4 → 2) 기대값 고침 · B08 관련 통과(215) · typecheck · prettier · ruff
- [x] 244-5 기준점 좌측 패널 「공사지에서 본 방위」 칸 없앰(130번 = 방위는 지도 위치로 자동) · 기준점 자리 = 기준점 주소 좌표 · 좌표 없으면 견본처럼 공사지 서쪽 기본 · 새 시험
- 검증완료 — test_244_5 3건(좌표 없음 = 서쪽 · 옛 dir 「동」 무시 · 시점 좌표 모름 = 서쪽 · 기준점 북 좌표 = 위 · 동 좌표 = 오른 · 옛 「서」 무시 · 좌측 패널 방위 칸 없음 · 기준점 모달 안내 한 줄) + 244_* 20건 · 122 14건 통과 · typecheck · prettier · ruff
- [x] 244-6 (132번) 표 폭 = 위 다이어그램 폭 · 다이어그램 상자 안에 항목 글도 · 좌측 패널 거리이정표 카드 없앰(중점 측점 · 기준점 = 다이어그램 상자 모달에서 고침) · 팬 안 됨 고침(가운데 단추 끌기 실제 동작 + 빈 곳 왼쪽 끌기도 옮김) · (133번) 화면 글 「업체」 → 「거래처」(다이어그램 · 모달 · 표 머리 · 탭 이름 · 안내 · 알림) — 새 시험(실제 포인터 사건으로 팬 판정)
- 검증완료 — test_244_6 4건(pointerdown · move(+60 · +30) · up 사건 = 원배율에서 빈 곳 왼쪽 · 상자 위 가운데 끌기 모두 transform translate(60 30) · 상자 위 왼쪽 · 오른쪽 = 그대로 · 팬 안 되던 까닭 = 원배율에서 공용 팬 범위가 0 · 거래처 상자 항목 「장비 · 골재」(겹침 · 빈칸 뺌) + 이름 · 이름 없음 = 「거래처」 · 틀 fit-content + 다이어그램 contain inline-size · svg 너비 100% · 좌측 카드 없음 · 공사지 모달 중점 측점 · 도로 · 기준점 모달 등록 · 없앰 · [기준점 +] · 화면 파일 6개 「업체」 0) + 122 · 244_1 · 244_4 · 244_5 기대값 고침 · B08 관련 · 243_1 · 164(공용 팬 줌) 통과(222 · 13) · typecheck · prettier · ruff
## 247. B08 구조물 집계표 — 측점 줄 구조물조합 모두 연결 = 초록 램프 (sub7)
정함(브레인) = 사용자 131번 · 지금 노랑 램프(미연결 · 154-1 · 198-1)만 있음 → 그 측점 줄의 시설이 모두 조합 연결된 줄 = 초록 램프(같은 자리 · 같은 크기 · 호버 글 「모두 연결됨」) · 미연결 = 노랑 그대로 · 시설 없는 줄 = 램프 없음 · 색 = 테마 변수(밝음 · 어두움)
- [x] 247-1 초록 램프 — 새 시험
- 검증완료 — test_247_1 3건(공용 표 실제 그림: 모두 연결 측점 칸 = 램프 + is-linked · 빈 칸 하나 = 노랑 · 시설 없음 · 합계 줄 = 없음 · 호버 「모두 연결됨」 · 성공 토큰 밝음 · 어두움) + 198_1 · 160_2 · 61_1 · 143_1 · 154_2 · 156_1 · 145_3 · 120 · 98 통과(52) · typecheck · prettier · ruff
- [x] 244-7 (136번) 카카오 길찾기 REST 로 km 자동 — 키 .env KAKAO_REST_API_KEY(브레인 확인: 거창군청 → 병곡리 10,463 m · 길찾기 성공) · 서버만 부름(키 브라우저로 안 감) · 거래처 등록 · [길찾기] 때 구간마다(거래처 → 기준점 · 기준점 → 시점 · 기준점 없으면 거래처 → 시점) km 자동 · 시점 → 중점 = 노선 측점 거리 · 도로 구분 = 사용자 고름 그대로(자동 판정 없음) · 경로 좌표 · 응답은 저장 안 함(km 만) · 키 없음 · 실패 = 안내 한 줄 + 손 입력 · 경로 그림(카카오 지도 JS)은 244-9 로(자바스크립트 키 · 도메인 등록 뒤)
- 검증완료 — test_244_7 6건(가짜 응답 10463 m = 10.5 km · 10450 → 10.5 · 10449 → 10.4 · origin · destination = 경도,위도 · KakaoAK 머리 · 경로 좌표 응답에 없음 · 키 없음 = 안내 · 카카오 안 부름 · 401 · 429 · 500 · 끊김 · 깨진 응답 · result_code 104 = 까닭 한 줄 · 키 값 응답 · 로그 0 · 구간 = 거래처 → 기준점 · 기준점 → 시점 · 기준점 없음 = 거래처 → 시점 · 사용자 23.8 우선 + 호버 「자동 값 10.5 km」 · 안 고름 = 「도로 구분 고르기 1.4km」 · 합에 안 듦 · TS 거울 같음) + 실제 카카오 한 번 = 10.5 km + 244_* · 122 · 243_1 통과(41 · 5) · typecheck · prettier · ruff
- [x] 244-8 (135번) 다이어그램 영역 스크롤 없앰 — 틀 overflow 숨김 · 휠 = 줌만(페이지 · 틀 스크롤로 안 샘 · passive false preventDefault) · 다이어그램 크기 = 틀 안 맞춤 · 표 영역 스크롤은 그대로 — 새 시험
- 검증완료 — test_244_8(진짜 wheel 사건: 그림 위 = scale 1.15 · defaultPrevented · 틀 위 = passive false · defaultPrevented · 틀 overflow hidden) + 244_* 26 통과 · typecheck · prettier
- [x] 244-9 (138번 · 가 배제 → 나) 경로 그림 = 카카오 지도 JS 위 경로 — 거래처 모달 · 경로 하위 탭에 카카오 지도(JS SDK · 키 = .env KAKAO_JS_KEY · 서버 설정 길로 줌 · 도메인 = localhost:5173~5181 등록) · 길 선 = 서버 길찾기 응답 경로 좌표(그때그때 · 저장 안 함) · 표지 · [캡처] = getDisplayMedia(preferCurrentTab) + 지도 칸만 잘라(CropTarget · 안 되면 자리 수치) → 그 탭 그림 · JS 키 없음 = 안내 한 줄 · VWorld 바탕 그림 없앰 — 새 시험
- 검증완료 — test_244_9 8건(가짜 vertexes 2구간 → path [위도, 경도] 4점 · 원문 없음 · 깨진 좌표 = km 10.5 그대로 · path [] · 화면이 path 실어 보내도 milestone.json 에 좌표 0 · map-key 없음 · 빈칸 = null · 표지 = 거래처 · 기준점 · 시점 · 좌표 없는 것 뺌 · 캡처 자르기 ×2 = 200 · 100 · 800 · 600 · 영상 밖 자름 · 키 없음 = SDK 안 부름 + 안내 한 줄 + [지도 캡처] 숨김 · 가짜 kakao.maps = 길 선 2 · 표지 3 · 맞춤 점 8) + 실제 카카오 거창군청 → 병곡리 = 10.5 km · 경로 좌표 159점(JS 키 없음 = 지도 실제 확인은 브레인) + 244_* 40 통과 · typecheck · prettier · ruff
- [x] 244-10 테일스케일 주소(http://100.72.32.27:5173 · 보안 문맥 아님) — [지도 캡처]는 getDisplayMedia 없으면 끄고 까닭 한 줄(「캡처는 localhost 또는 https 주소에서만 — 사진 올리기」) · 지도 SDK 도메인 불일치(401)면 「카카오 JavaScript 키 도메인에 지금 주소 등록 필요(예 http://100.72.32.27:5173)」 안내 한 줄 — 새 시험
- 검증완료 — test_244_10 3건(navigator.mediaDevices 없음 = [지도 캡처] disabled · title · 안내 「길 선 = 카카오 길찾기 · 캡처는 localhost 또는 https 주소에서만 — 사진 올리기를 쓰세요」 · 지도 그대로 · 있음 = 켜짐 · SDK script onerror = 「카카오 JavaScript 키 도메인에 지금 주소(http://100.72.32.27:5173) 등록 필요 — 지도 대신 [그림 올리기]로 넣으세요」 · 지도 · 캡처 숨김) + 244_* 43 통과 · typecheck · prettier · ruff
- [x] 244-11 (139번) 경로 그림 = 서버 자동 캡처 — 서버가 헤드리스 Edge(Playwright channel msedge · 없으면 chrome)로 등록 도메인 주소(기본 http://localhost:5173/__route_capture · 가로채 채움 · .env KAKAO_CAPTURE_ORIGIN 로 바꿈)에 카카오 지도 JS + 길 선 + 표지 + 경로 맞춤 → tilesloaded 뒤 1200×800 PNG → 그 거래처 경로 하위 탭 그림 · [등록] · [길찾기] 때 자동 · 사용자 그림 우선 · 브라우저 [지도 캡처] 없앰(접속 주소 무관 · 테일스케일도 됨) · 모달 · 탭 안 카카오 지도 보기는 그대로 · 실패 = 까닭 한 줄 · 사진 올리기 · 브레인 견본 = sub8 tmp/route_capture_proto.py(2.4초 · 159점 · 10.5 km) — 새 시험
- 검증완료 — test_244_11 6건(가짜 브라우저: 길 선 · 표지 → auto/r1.png · 주소 = 기본 · KAKAO_CAPTURE_ORIGIN(100.72.32.27:5173) + /__route_capture page.route · Edge 없음 = chrome · 폴더 파일 = 그림 하나(좌표 0) · 키 값 응답 0 · 사용자 그림 우선 · user_only 되돌리기 = 자동 그림 · 지우기 = 둘 다 · 경로 지우고 [저장] = 자동 그림도 · 까닭 한 줄 = 키 없음 · Playwright 없음 · 브라우저 못 띄움 · 20초 넘김 · 도메인 불일치 · 동시 3건 = 한 번에 하나 · 화면 getDisplayMedia · 지도 캡처 0) + 실제 한 번(엔드포인트: 거창군청 → 시점 10.5 km · 159점 → 1200×800 PNG 2.2초 · 파일 생김) + 244_* 48 통과 · typecheck · prettier · ruff
- [x] 244-12 (142~144번) 다이어그램 ① 처음 보기 = 넉넉한 바탕 영역(공사지만 있어도 거래처 · 기준점 들어올 자리까지 담는 고정 바탕 범위 · 새 상자 들어와도 다시 줌아웃 필요 없음 · 바탕 넘는 상자가 생기면 그때만 넓힘) ② 시점 ↔ 중점 연결선(도로 구분 · km 글 = 시점 → 중점 구간) · 시점 · 중점 상자 안 작은 글씨 주소 · 좌표(위도 · 경도 소수 5자리) ③ 거래처 상자 = 항목 · 거래처 이름 · 주소(작은 글씨 · 길면 줄임표 + 호버) ④ (145번) 상자 · 선 · 선 글 서로 여유(상자 사이 최소 간격 · 선 글이 상자 · 다른 선을 덮지 않게 자리 피함 · 선은 상자 테두리에서 끊김) — 새 시험
- 검증완료 — test_244_12 6건(바탕 = 고정 1024×934 · 공사지만 · 공사지 둘레 8방 · 기준점만 = 바탕 그대로 · 기준점 너머 거래처만 그쪽 넓힘 · 시점 → 중점 선 = 공사지 바탕 위 · 시점 · 중점 작은 글씨 주소(줄임표 · 호버 원문) · 좌표 35.70000, 127.81235 · 주소 없음 = 좌표만 · ?mid_m= 중점 주소 = 지금 측점 · 음수 422 · 거래처 = 항목 · 이름 · 주소 · ④ 몰린 꼴 13 상자 = 상자 사이 12 이상 · 선 끝 상자 밖(바깥 → 시점 = 공사지 테두리) · 선 글 ↔ 상자 · 다른 선 · 다른 글 겹침 0) + 244_* 54 통과 · typecheck · prettier · ruff
- [x] 244-13 (147번 5 · 8) ① 공사지 [+] 모달 = 더 크게 · 2열(분류(기준위치 · 거래처) · 항목(분류 따라 바뀜) · 거래처 이름 · 목적지) · 다이어그램 [기준점 +] 없앰(분류 = 기준위치로 넣음) · 「거래처 위치」 → 「소재지」 · 직접 입력 단추 없앰(주소 찾기 · 지도 고르기만) · 등록 모달 지도 = 다음(카카오) 지도 ② 상자 누름 = 같은 등록 모달(고침) ③ 길찾기 = 연결선 누름 모달 — 값 = 도로 구분 · 거리 · 아래 다음 지도 경로(기준점 있으면 거래처 ↔ 기준점 경로 · 지도에서 위치 끌어 옮김) · 시점 ↔ 기준점 = 도로 없을 수 있어 거리 손 입력 가능 · 시점 ↔ 중점 = 늘 손 입력 ④ 도로 구분 = 기준점 거쳐 시점 들어가는 경로만 「2차포장 · 1차포장 · 비포장」 · 기준점 없으면 「포장 · 비포장」(표 열도 그에 따름) — 새 시험
- 검증완료 — test_244_13 7건(포장 거울: 기준점 없음 포장 10.4 + 비포장 0.5 = 10.9 · 중점 줄 11.7 · 기준점 거침 2차 23.8 + 1차 0.6 + 비포장 0.8 = 25.2 · 거침 안 함 포장 5 · 파이썬 = TS · 3차포장 거절 · 도로 구분 갈래 = 거침 3종 · 아니면 포장 · 비포장 · 구간 끝 g → 병곡리 · d → 시점 · 병곡리 → 시점 · 시점 → 중점 = 없음 · 표 열 = 기준점 없음 포장 · 비포장 · 합계 · 있음 2차 · 1차 · 비포장 + 계 · 소재지 역지오코딩 · 위도 91 = 422 · 지도 누름 = 소재지 · 끌기 = 거래처만(시점 고정) · 점 없음 = 시점 가운데 · 연결선 길찾기 한 구간 · 거래처 쪽만 자동 그림(표지 둘) · 같은 km = 캐시 안 씀 · 사용자 23.8 그대로) + 244_* 61 · 122 9 통과(옛 화면 글 기대값 고침 8개) · typecheck · prettier · ruff
## 248. B09 다른 탭 이동 빨강 = 설계내역서 규칙과 같게 (sub3)
정함 = 사용자 147번 3 「반영」(242-1 보고의 목록) · 일위대가표 · 중기사용료 · 단가산출근거(Groups pickRange 호표 구간 빨강) · 묶음 카드 보기 is-pick — 공용 focusRow 강조와 겹치지 않음(빨강 하나만) · 다른 줄 · 카드 누름 · 방향키 · Esc = 빨강 풀림 · 산근 시트 칸 td.is-pick 은 뜻 달라 그대로
- [x] 248-1 — 묶음 카드 보기 = 이동해 온 박스 빨강만(줄 강조 안 붙음) · 카드 · 줄 누름 = 빨강 풂 · 누른 줄만 고름 / 표 보기 = 호표 구간 빨강만(focusRow 스크롤만) · 줄 누름 = 빨강 풂 · 누른 줄만 고름(다시 그려도) / 방향키 = 빨강 풂 · Esc = 고름도 풂 · 글 칸 안 키 그대로 — 새 시험
- 검증완료 — test_248_1 3건 + 242_1 · 239_1 · 181_2 · 245_1 · 171_2 · 171_3(도착 줄 강조 기대 고침) · 묶음 카드 시험 통과 · typecheck · prettier · ruff
- [x] 244-14 [+] 모달 「항목」 = 손 입력 + 고르기 제안(120-답 ③ 「항목: 수기 입력」 · 거래처 제안 = 견본 다섯 장비(20톤) · 장비(8톤) · 혼합골재 · 전석운반 · 철근 · 기준위치 제안 = 기준점 · 목록 밖 글도 받음) — 시험 고침
- 검증완료 — test_244_14 2건(빈 칸 + 제안 다섯 · 기준위치 = 제안 기준점 · 목록 밖 글 유지 · 줄마다 제안 목록 따로) + 244_* 63건 통과 · typecheck · prettier · ruff