---
status: THREE_DOMAIN_CONTINUITY_CANARY_EXECUTOR_SELF_TESTED_NOT_LIVE
observed_at: 2026-08-05T14:28:34+09:00
production_changed: false
router_mapping_performed: false
rollout_policy_written: false
operator_signing_used: false
validator_signing_used: false
---

# 3-domain service continuity canary 실행 경로

## 목적

제3 WAN과 명시적 승인이 준비된 뒤 RPC·directory·capsule·service shell 검증을 여러 수동 명령으로 연결하지 않도록 기존 유한 UPnP canary를 하나의 회수 가능한 실행 경로로 확장했다. 현재 production에서는 실행하지 않았으며 plan-only 모드는 관측 domain이 2개이므로 실행을 거부한다.

## 강화된 실행 전 조건

- fresh chain runtime-ready PC 정확히 3대 이상
- 선택된 3대의 `networkFailureDomainHash`가 모두 다름
- 세 relay의 public origin, Ed25519 node key, 관측 failure domain이 모두 다름
- 각 `/gateway/health`가 자기 node key를 반환
- 후보 버전과 해시가 승인된 `1.4.81`과 일치
- 형식이 유효한 별도 `approval-id`

기존 canary의 `PC 3대이면 ok` 조건을 제거하고 `PC 3대 + 독립 domain 3개`일 때만 실행하도록 변경했다. 현재 결과는 `topologyReady: false`, `THREE_INDEPENDENT_PUBLIC_FAILURE_DOMAINS_REQUIRED`이다.

## 승인 후 실행 순서

1. 세 대상에 RPC attestation·peer exchange·유한 UPnP·stateless capsule만 먼저 활성화한다.
2. 세 public relay의 health identity와 동일 RPC 3표 인증서를 확인한다.
3. 확인된 세 node key만 `admittedNodeKeyIds`로 넣어 signed directory 기능을 짧게 활성화한다.
4. 동일 RPC certificate와 capsule commitment에 묶인 directory proposal을 세 relay에 보낸다.
5. 각 relay가 자기 DPAPI 보호 Ed25519 key로 만든 vote를 다른 두 relay에 fan-out한다.
6. 세 relay가 반환한 bundle 각각의 RPC anchor, 3개 signature, manifest commitment, endpoint URL·key·domain·release hash를 다시 검증한다.
7. 세 relay 모두에서 fenced capsule RPC 검증을 실행한다.
8. 세 relay 모두에서 manifest-bound read-only service shell과 CSP `form-action 'none'`을 확인한다.
9. 모든 feature flag를 false로 내리고 attestation lease 만료, 세 UPnP mapping 제거, rollout policy 삭제를 확인한다.

성공과 실패 경로는 동일한 회수 함수를 사용한다. false policy 적용, attestation lease 소멸, 기존 relay 비도달, 새 relay 부재를 모두 확인한 뒤에만 rollout policy를 삭제한다. 회수 확인이 실패하면 false policy를 남겨 클라이언트가 계속 비활성 상태를 받게 하고, 최악의 경우에도 UPnP mapping은 1,800초 lease를 넘지 않는다. 기존 production DB·DNS·public API·외부 전송·운영자 서명·validator는 이 흐름의 대상이 아니다.

## 합성 검증

세 개의 독립 relay 상태 머신이 각기 다른 Ed25519 key로 proposal에 투표하도록 구성하여 다음을 확인했다.

- RPC 3표
- manifest 3표
- directory source 3표
- service endpoint 3개
- capsule 실행 3회
- service shell 확인 3회
- 중복 failure domain 거부
- directory source 2개 거부
- payload 변조 거부

합성 시험은 외부 네트워크, router, production DB write, 운영자·validator signing을 사용하지 않았다.

증거: `evidence/three-domain-continuity-canary-self-test-redacted.json`

## 남은 실증

이 단계는 실행기가 준비되었음을 증명할 뿐 live continuity를 증명하지 않는다. 제3 독립 WAN이 확인되고 사용자가 `최대 3대/TCP 5277/1,800초` canary를 명시적으로 승인해야 실제 실행할 수 있다. Web/TWA production 검증에는 이 HTTP canary와 별도로 세 독립 HTTPS origin이 필요하다.
