7장 사람 승인 게이트를 구현한다
사람 승인에는 내용, 대상, 범위, 만료, 승인자가 필요하다. “승인됨=true”는 변경과 재사용을 막지 못한다. BriefFlow는 승인 당시 브리프 상태와 제안을 직렬화해 SHA-256 해시를 만든다.

실행 직전에는 다음을 검증한다.
- 영수증의 브리프 ID가 현재 대상과 같은가
- 만료되지 않았는가
- 현재 산출물 해시가 승인 당시와 같은가
- 행동 유형이 허용 목록에 있는가
- 승인자가 해당 범위를 승인할 권한이 있는가
승인 UI는 요약만 보여 주지 않는다. 실제 수신자, 제목, 본문, 일정 시간, 변경되는 시스템을 보여 준다. 여러 건 일괄 승인은 동질적인 저위험 항목에만 허용하고 예외를 따로 표시한다.
실습: 변경 감지
테스트에서 영수증을 만든 뒤 proposal.estimate를 바꾸고 verifyReceipt를 호출한다. 결과는 ARTIFACT_CHANGED여야 한다. 이것은 불편한 실패가 아니라 승인 무결성을 지키는 성공이다.