knowledge(M01): 조합 마감 검증 — 메모 칸 모양 · 이름 모양 두 곳 어긋남 (일감 24)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
This commit is contained in:
2026-09-22 00:18:22 +09:00
co-authored by Claude Sonnet 5
parent 6cb6baabd6
commit df4aa43026
@@ -0,0 +1,20 @@
# 검증 — 일위대가 조합 (일감 24)
읽기 전용 · 시험용 복사본 폴더에서 서버 길(TestClient)로 만들고 지움 — 정본 `일위대가조합.json`(줄 0)·`_키대장.json` 은 안 건드림.
## 어긋난 것 (2)
1. **`메모` 칸으로 수량이 새 들어갈 수 있음** — 담은 로직 줄의 `메모` 에 글자가 아닌 값(숫자 `5` · 묶음 `{"수량": 3}`)을 보내도 200 으로 저장됨. 검사(`master_combo.check_row`)는 칸 이름(로직 · 메모)만 보고 `메모` 값의 모양은 안 봄 → 4-0(조합에 수량·계산 없음)의 뒷문. 재현: `POST /combo/new``담은로직: [{"로직": "GF000219", "메모": {"수량": 3}}]`. 고칠 곳: `check_row` 에서 `메모` 는 글자 또는 null 만. `check_master` 도 같은 함수를 써서 같이 잡힘.
2. **`이름` 이 글자가 아니어도 저장됨** — `이름: ["x"]` 가 200 으로 저장(`UA000005`) · `check_combo_form``str()` 로 감싸 통과. 고칠 곳: 이름은 글자만(서버 400 · 틀 검사).
참고(계약대로라 어긋남 아님 · 확인만): `구분` · `단위` 를 안 주면 null 로 저장됨 — 미리 보기 `결과단위` 없는 조합이 생길 수 있음.
## 통과한 것
- ① 만들기 → 읽기 → 고치기 → 지우기: 키는 서버가 `UA` 다음 번호로 줌(지운 번호는 다시 안 씀) · 열 한 벌(키·이름·구분·상세구분·단위·담은로직·출처·소유·비고)이 그대로 저장 · 고치기로 로직 빼기 · 지우면 줄 0. `키`·`소유` 를 몸에 실어 보내도 서버 것이 이김.
- 수량·계산 칸: 조합 위쪽 여분 칸(`수량` · `계산` · `비율`)은 200 이되 **저장되지 않고 버려짐** · 담은 로직 줄의 여분 칸(`수량` · `계산`)은 422(「모르는 칸」).
- ② 검사: 없는 로직 키(422 「없는 요소」) · 모양 틀린 키 · 같은 로직 두 번(줄 번호 표시) · 빈 조합 · `담은로직` 없음·null · 조합이 조합을 담기(`UA…`) · 로직 아닌 키(`EA…`) · 목록 아님 · 줄이 묶음 아님 · 이름 공백 400 · 모르는 소유 400 · 없는 키 404 — 모두 막힘. 거절된 요청은 파일·키 번호를 바꾸지 않음(같은 번호가 다시 나옴).
- 낡은 판본: 고치기·지우기 모두 409 `{stale: ["일위대가조합.json"]}` · 거절된 고치기 뒤 판본 그대로.
- 담은 로직이 나중에 사라지면: 조회는 200 + `blocked` true + 까닭 · 미리 보기는 그 줄만 멈추고 나머지 합계는 냄.
- ③ 미리 보기 합계: 로직 셋(GF000219 산림 찾기 · GC000996 덧줄 있음 · GC000994 로직 부르기 있음)을 담아 각 로직의 시험 계산과 비목별로 대조 — 줄마다 노무비·재료비·경비가 같고, 합계도 노무·재료·경비 비목별 합과 같음(계 729,595.598). 저장 전 조합 줄로 보내도 같은 합계 · 미리 보기는 저장하지 않음(줄 수 그대로). 입력에 없는 이름을 주면 그 줄만 「입력 … 없음」으로 멈춤. `/logic/combos` 거꾸로 찾기 · 목록의 `count` · 소유·찾기 거름도 맞음.
-`check_master`: 조합 검사가 들어 있음(`조합` 모드 · `전부` 모드에 포함 · 틀은 `check_combo_form`) — 정본에서 틀 0 · 로직 0 · 조합 0건. 시험 `test_m01_combo.py` 17 통과.