---
status: OFFLINE_PROTOCOL_STAGE_SELF_TESTED_NOT_ACTIVATED
production_manifest_changed: false
chain_write_performed: false
operator_signing_used: false
main_server_outage_continuity_proven: false
---

# 메인 독립 manifest·replica repair 프로토콜 staging

## 구현 범위

다중 replica canary 다음 gate를 위해 `E:\aisfor`에 두 개의 순수 프로토콜 모듈을 추가했다.

- `services/permissionlessManifestProtocol.js`
  - key 순서를 고정한 canonical JSON과 SHA-256 payload commitment
  - chain ID, sequence, 유효기간, 이전 commitment를 묶은 domain-separated manifest commitment
  - verifier가 peer가 준 주장 자체가 아니라 별도로 조회한 `finalized` chain anchor를 요구
  - expiry, 과도한 TTL, rollback sequence, previous-commitment 불일치, payload 변조를 fail-closed
  - 동일 peer 중복을 제거하고 서로 다른 peer의 동일 commitment quorum을 선택
- `services/deterministicReplicaRepair.js`
  - hostname allowlist 없이 유효 lease, challenge 통과, 저장 여유가 있는 node만 후보로 사용
  - 기존 replica와 다른 failure domain을 우선
  - chunk hash와 epoch에 묶인 결정론적 순위로 후보 입력 순서와 무관한 결과 생성
  - 모든 참여자가 같은 repair election commitment를 계산할 수 있음
- `services/capabilityLeaseProtocol.js`
  - node 자체 Ed25519 서명과 key ID 검증
  - finalized chain participant membership과 node key binding 요구
  - 신선한 resource challenge와 5분 이하 lease 요구
  - storage, read-only RPC, read-only service, recovery cache capability만 허용
  - hostname을 claim/admission 입력에서 제외하고 operator 서명을 요구하지 않음

## self-test 결과

`permissionless-manifest-protocol-self-test.js`는 정상 commitment와 finalized anchor를 승인하고 다음 경우를 모두 거부했다.

- payload 변조
- 만료 manifest
- 낮은 sequence의 rollback
- finalized가 아닌 anchor
- 동일 peer를 중복시킨 가짜 quorum

`deterministic-replica-repair-self-test.js`는 후보 배열 순서를 뒤집어도 같은 노드와 같은 election commitment가 나오고, 만료 lease를 제외하며, 새 failure domain을 우선해 목표 replica 3개를 채우는 것을 확인했다.

`capability-lease-protocol-self-test.js`는 node 자체서명, finalized membership, challenge nonce와 lease expiry를 검증하고 claim 변조·미확정 membership·잘못된 challenge를 모두 거부했다. 테스트용 Ed25519 key는 메모리에서만 생성했으며 operator key와 무관하다.

## 아직 하지 않은 것

- production manifest route와 PC cache 형식은 변경하지 않았다.
- commitment를 canonical chain에 기록하지 않았다.
- operator 또는 validator key로 서명하지 않았다.
- peer 수신 endpoint와 실제 repair 실행 권한을 열지 않았다.
- production multi-replica flag, DNS, 공개 API, 외부 전송, validator set을 변경하지 않았다.

## 다음 live gate

1. canonical QBFT의 read-only RPC 여러 개에서 동일 finalized block과 manifest commitment를 2-of-3로 읽는다.
2. 합성 capability manifest만 사용해 PC 두 개 이상이 같은 envelope를 cache·제공하도록 한다.
3. 메인 AISFOR를 중지한 격리 시험에서 peer manifest quorum과 결정론적 repair election이 계속 계산되는지 확인한다.
4. 실제 replica 복사 실행은 fencing, lease, 중복 전송 억제가 검증된 뒤 별도 승인 gate에서 연다.

이 staging은 메인 독립 동작에 필요한 검증 규칙을 만든 것이며, 아직 `main_server_outage_continuity_proven=true`로 바꾸는 근거는 아니다.
