입력 상한·단위 보존 정비 — 원인 미지목 저장 실패 계열 소거와 lb 승계 (2026-08-31)
- 기간: 2026-08-30 ~ 08-31 (1세션, #926 수리 후 같은 계열 전수 재점검 → 오너 상한 확정 — 이슈 #950)
- 랜딩: PR #951(
c88a6d56) — 마이그레이션 20260831120000(구 20260830120000에서 재번호) Productiondb push완료(포스트체크 통과), Vercel 배포 청크 마커 2종(마이그레이션 번호·% 안내 문구) 실측 — 종결(08-31 오너 지시로 실기기 확인 게이트 폐지 — 자동 검증으로 닫음, 이슈 [반영완료]) - 설계서: 없음(단일 트랙 — 유저 시나리오별 목록·오너 결정 원문은 이슈 #950 본문)
- 정본:
group_validated_board_exercises_v1·save_group_board_v1(schema.sql 20260831120000 절) ·groupStore.ts왕복 ·group-props.md§4·§5 - 게이트:
groupBoardInputLimits.test.mjs5건 · pgTAPgroup_board_input_limits.test.sql9건 · 마이그레이션 포스트체크(이전 트랙 기능 생존 단언 포함) - 버그리포트:
bug-043-20260830.md - 계약: 보드 세트에
load_lb?(>0..4500) · 제목 50자/200B · 자유기록 제목 50자·본문/종목 메모 1000자(4000B) · 보드 용량 128KB · 세트 반복 0..2000(#938 정합) — 전부 서버·입력칸 동시(오너 지시 원문 계약문 기록)
1. 배경 · 2. 문제 제기 (유저 기준)
- A가 보드 제목을 41자 이상 쓰면 "입력값을 확인해 주세요"만 뜨고 저장이 죽는다 — #926과 같은 "서버는 거부하는데 입력칸은 안 막고, 에러는 원인을 지목하지 않는" 무늬.
- 세트 %를 상한 밖으로 쓰면 같은 증상. 자유기록 본문 500자·종목 메모 80자는 좁다(오너 판단).
- A가 225lb로 올린 세트는 보드 수정 재진입 시 102.1kg로 보인다 — %를 %로 보존한 #837이 lb에는 미적용.
오너 확정(2026-08-30 채팅): 제목 50자·본문/메모 1000자(서버·입력칸 동시), % 1~150 + 안내 문구 "0% 보다 크고 150% 보다 작은 값만 가능합니다", lb 보존.
3. 해결 방안
원칙 = 실패를 저장 시점이 아니라 입력 시점에 막고, 편집기가 쓸 수 있는 값은 계약이 나른다. 메모 1000자 확대가 보드 용량 16KB를 소진시키는 2차 실패 자리(긴 메모 4~5개)도 같은 원칙으로 128KB 상향, #938이 올린 세션·계획 반복 상한(2000)과 보드(1000)의 어긋남도 정합.
4. 적용한 내용
- 서버 20260831120000: 제목 제약 50자/200B·보드 용량 128KB(테이블+저장 RPC), 검증기에 자유기록 제목 50자·본문/메모 1000자·
load_lb(>0..4500)·반복 0..2000. - 클라: 컴포저 제목 maxLength 50·자유기록 편집기 50/1000자(운동 플로우·데스크톱 계획 편집기의 절단도 1000자 동조 — 모바일에서 쓴 긴 노트가 재편집에서 잘리는 자리)·% 입력 게이트+지정 문구·lb 직렬화/왕복/재진입 복원·재수화 폭 bwFactor 동반.
- 작업 중 드러난 것 ①(되덮기 사고 회피): 랜딩 사이에 #938(20260830130000)·#947(20260831100000·110000 — 같은 검증기를 두 번 재발행: 복합 동작별 값 parts, 필수 입력 검사)이 먼저 적용됨. 구 번호로 뒤늦게 적용되면 그 기능들을 지우는 자리라 재번호 + 최신 본문 위 재합성, 포스트체크에 "이전 트랙 기능(parts) 생존 단언" 추가. 1차 재합성이 110000을 빠뜨린 것을 #947의 pgTAP이 CI에서 적발 — 관통 게이트의 실효 사례.
- 작업 중 드러난 것 ②(계약 창 게이트): % 게이트 삽입이 "kg 입력 처리 260자 안에 lb 흔적 청소가 나온다"는 기존 계약 테스트를 밀어내 RED — 게이트를 짧은 도우미 함수로 추출해 복원.
- 정정: 이슈의 "맨몸 종목 수정 시 무게 입력칸 오노출"은 과대평가 — 입력칸 표시는 기록 항목만으로 결정되며, 실제 효과는 재수화 데이터 정합 수준.
5. 적용 결과
| 항목 | 전 | 후 |
|---|---|---|
| 제목 41자+ 저장 | 원인 안내 없는 실패 | 입력칸 50자 멈춤 — 실패 소멸 |
| 자유기록 본문·종목 메모 | 500자·80자 | 1000자 (보드 용량 16KB → 128KB) |
| % 이상값 | 저장 시점 무설명 실패 | 입력 시 즉시 안내·미반영 (1~150) |
| lb 세트 수정 재진입 | kg 격하 | lb 입력 상태 복원(보드 표시는 kg 유지) |
| 보드 세트 반복 상한 | 1000 (#938 후 세션 2000과 어긋남) | 2000 정합 |
실기기 4항목(제목 멈춤·1000자·% 안내·lb 재진입)은 자동 게이트(입력칸 상한 앵커·pgTAP·배포 마커)로 갈음 — 사용 중 발견 시 재오픈(08-31 게이트 폐지). 범위 밖 관측 1건: 원격 계약 검사의 볼륨 오버뷰 계열 3건 불일치 — #938 트랙 소유 함수(이 트랙 객체는 missing 0).
6. 이번 개선으로 향상된 것 · 남은 것
"입력은 받는데 저장이 이유 없이 죽는" 계열이 보드 표면에서 소거됐고, 같은 검증기를 여러 트랙이 재발행할 때의 되덮기 사고에 대한 게이트(생존 단언 포스트체크)가 구조로 남았다. 남은 것 없음 — 이슈 #950 [반영완료] 닫음(08-31).