---
status: SIGNED_RECOVERY_CHECKPOINT_SELF_TESTED_DEFAULT_OFF_NOT_LIVE
candidate_version: 1.4.81-node-bound-distinct-upnp-port-default-off-locked
candidate_bytes: 481811
candidate_sha256: bbac9679202b815127ec270ea8646f56d1abb872ff6e652e3bfc9556f358ce96
production_write_connected: false
router_mapping_performed: false
operator_signing_used: false
validator_signing_used: false
---

# 서명 recovery projection 체크포인트 staging

## 목적

`service-recovery` event mailbox는 원래 genesis부터 최대 256개 record를 보존하고 용량에 도달하면 안전하게 중단했다. 이번 단계에서는 3개 적격 witness와 최소 2개 failure domain이 동의한 서명 체크포인트가 확정된 경우에만 이전 record를 줄일 수 있게 했다. production DB나 서비스 write path에는 연결하지 않았다.

## 체크포인트에 보존되는 상태

- chain ID와 고정 recovery stream hash
- checkpoint epoch와 이전 checkpoint commitment
- 마지막 sequence와 event hash
- 현재 암호문 hash projection
- 삭제 tombstone을 포함한 key별 `versionFloors`
- 전체 projection commitment
- witness admission epoch와 finalized RPC block

삭제된 key의 version floor가 체크포인트에 남으므로 compaction 뒤 낮은 version의 값이 다시 들어오는 stale resurrection을 거부한다. 체크포인트 이후 event는 이전 마지막 event hash와 정확히 이어지고 RPC finality block도 뒤로 갈 수 없다.

## quorum과 rollback 방어

- 적격 `recovery-cache` 또는 `rpc-read` witness 3개
- 서로 다른 failure domain 최소 2개
- 동일한 finalized RPC block number/hash
- 같은 epoch의 다른 checkpoint는 equivocation으로 거부
- 이전 epoch로 돌아가는 checkpoint는 rollback으로 거부
- 다음 epoch는 직전 checkpoint commitment를 반드시 참조
- vote가 만료된 뒤에도 서명 당시 유효했던 보존된 admission/runtime-policy 증명으로 historical verification

## PC Sync endpoint

기존 `peerSignedEventMailboxEnabled`와 `AISFOR_PEER_SIGNED_EVENT_MAILBOX_ENABLED` 잠금을 그대로 사용한다. 기본값은 false다.

- token 필요: `POST /gateway/recovery-event/checkpoint/create`
- peer mailbox: `POST /gateway/recovery-event/checkpoint/proposal`
- peer mailbox: `GET|POST /gateway/recovery-event/checkpoint/vote`
- read-only: `GET /gateway/recovery-event/checkpoint`
- projection 조회는 checkpoint certificate와 checkpoint 이후 tail record를 함께 반환

확정 전에는 record를 삭제하지 않는다. checkpoint quorum이 완성된 뒤에만 포함된 record를 제거하며, 저장된 checkpoint에서 다음 sequence를 이어 쓸 수 있는지 임시 상태 파일 자기시험으로 검증했다.

## 검증 결과

- pure protocol: 2개 checkpoint epoch, 3 witness, 3 failure domain
- embedded candidate: 3 witness, 3 failure domain, vote 만료 후 검증
- 전체 rebuild와 checkpoint+tail rebuild commitment 일치
- tombstone version floor 보존과 stale resurrection 거부
- 2 vote, 단일 failure domain, epoch rollback/equivocation, 잘못된 이전 commitment 거부
- 실제 임시 상태 파일에서 finalized checkpoint 후 record compaction 및 다음 event 연속성 통과
- production storage/DB/router/DNS/API/validator/operator signing 미사용

증거: `evidence/signed-recovery-checkpoint-self-test-redacted.json`

## 남은 live gate

이 단계는 default-OFF staging이다. 실제 recovery metadata write canary, 3번째 독립 public failure domain, 물리 Android 검증, 라우터 제한 canary 및 메인 서버 outage rehearsal은 각각 별도 승인이 필요하다.
