← 목록
기타 2026-07-24 3KB 읽기 3분

크라우니캔버스 — 결재함 승인(erp.approve) 확인다이얼로그 누락 수리

개요

앱/화면/approval.js의 승인 버튼이 확인다이얼로그 없이 즉시 erp.approve 커맨드를 실행 — 계약서(07-앱-계약.md §3) 화이트리스트 민감 커맨드는 확인 경유가 필수인데 반려(erp.reject) 버튼과 달리 우회하고 있었음(P0).

확증 재현 (수리 전)

  • curl -s http://127.0.0.1:9620/화면/approval.js 419행: CC.커맨드('nexus','erp.approve',{id:it.id},{}) — opts 빈 객체.
  • 대조군 bar.html:372 은 동일 커맨드를 확인필요:true로 정상 호출.
  • CC.커맨드(공용.js:315~350) 게이트: opts.확인필요 truthy일 때만 확인다이얼로그 경유 — 승인 버튼만 falsy로 우회.
  • 서버(/api/커맨드)는 클라이언트가 우회해 바로 때리면 그대로 승인 확정 응답(서버측 재확인 없음, 클라 게이트가 유일 방어선).

수리 내용

  • 앱/화면/approval.js 승인 버튼: CC.커맨드(...) 세번째 인자에 확인필요:true, 제목:'결재 승인', 확인라벨:'승인', 본문:(제목+금액 요약) 추가 — bar.html과 동일 패턴으로 통일.
  • 동반 .한선(플랫폼락 더블): 한선씨/화면_결재함.한선에 순수 판정 함수 결재화면_커맨드확인필요(커맨드명) 추가 — 화이트리스트(iot.scene.run/erp.approve/erp.reject/day.close)는 1, 그 외 -1. 셀프테스트에 P0 회귀 케이스(결재화면_커맨드확인필요("erp.approve") == 1 등) 추가.

검증 (실측)

CROWNY_STRICT=1 ./hanseonc_high 한선씨/화면_결재함.한선 > /tmp/화면_결재함.toau   # exit 0, 경고 0
CROWNY_SELFTEST=1 ./crownyc run /tmp/화면_결재함.toau
  → 화면_결재함.한선 셀프테스트 전부 통과 (신규 5케이스 포함)

launchctl kickstart -k gui/$(id -u)/org.crowny.canvas → 재기동, / 200 확인
curl 서빙 approval.js diff 디스크파일 → IDENTICAL (스테일 아님)
curl 서빙 approval.js grep 419~424행 → 확인필요:true / 제목 / 확인라벨 정상 반영 확인

관련 파일

  • /Users/ef/crowny-canvas/앱/화면/approval.js (수정)
  • /Users/ef/crowny-canvas/한선씨/화면_결재함.한선 (동반 갱신)
  • /Users/ef/crowny-canvas/앱/공용.js (참조만, 무수정 — 게이트 로직 자체는 정상)
  • /Users/ef/crowny-canvas/앱/bar.html (대조군, 무수정)

잔여 이슈

  • 서버측(/api/커맨드)은 여전히 클라이언트 게이트에만 의존 — 승인성 커맨드 서버측 2차 확인/재검증(예: 별도 confirm 토큰)은 별개 과제로 남김(이번 수리 범위 밖, 계약서 §3 감사로그만 기록).