---
status: THREE_DOMAIN_THREE_NODE_HTTPS_READ_ONLY_CONTINUITY_PROVEN_AND_REVOKED
candidate_version: 1.4.109-runtime-heartbeat-null-stale-fallback-default-off-locked
three_pc_deployed: true
current_continuity: false
production_data_exposed: false
rollout_policy_present: false
---

# Quick Tunnel discovery canary staging

## 합성 외부 HTTPS 증명

Cloudflare 공식 Windows `cloudflared`를 staging에 내려받아 다음을 확인했다.

- version: `2026.7.3`
- bytes: `54213360`
- Authenticode: `Valid`
- signer: `Cloudflare, Inc.`
- SHA-256: `8635da433b6df8194746e88ed9d2589566c20e38bfc2a80e431a348b7c765841`

production process나 PC gateway 대신 합성 read-only server만 대상으로 Quick Tunnel을 실행했다. 임시 공인 HTTPS origin에서 health 200, read-only 표시, production data 없음, 비허용 chunk 경로 403을 확인했다. 전체 시험은 9초였고 종료 뒤 cloudflared process가 없음을 확인했다.

## PC 후보

`1.4.107-quick-tunnel-discovery-default-off-locked`은 signed runtime policy에 `quickTunnelCanaryEnabled`가 있고 local node key가 admitted set에 있을 때만 동작한다.

- lease 최대 30분
- 공식 binary SHA-256 pin
- 임시 origin은 정확한 `*.trycloudflare.com` HTTPS만 수락
- gateway 전체가 아니라 별도 loopback allowlist proxy만 tunnel에 연결
- 발견 URL과 SHA-256 commitment를 heartbeat로 보고
- directory/service feature는 발견 단계에서 OFF
- 두 번째 signed policy가 URL을 node key에 결합한 뒤에만 relay/capsule/directory 활성
- policy OFF/만료 시 process tree 종료, URL 숨김, state `POLICY_DISABLED`

## 3-PC 실행기

`scripts/run-quick-tunnel-service-canary.js`의 plan-only 결과는 대상 PC 3대, failure domain 2개, `MAIN_HOST_LOSS_ONLY_NOT_WAN_DOMAIN_LOSS`, 최대 1,800초로 준비됐다. 실행기는 다음 순서를 원자적으로 수행한다.

1. discovery-only policy로 후보 배포와 임시 HTTPS origin 3개 확보
2. URL·node identity·RPC attestation 확인
3. node-bound service policy 배포
4. 3 RPC certificate, directory vote, capsule, service shell 검증
5. false policy, RPC lease 만료, tunnel process 종료, URL 비도달 확인
6. rollout policy 삭제

## 3-PC live 실행 결과

사용자가 Cloudflare 제3자 전송, 제한된 read-only gateway payload, 3대 PC, 최대 30분, 종료 후 자동 삭제 범위를 명시적으로 승인한 뒤 실제 실행했다.

첫 실행은 세 임시 HTTPS origin과 RPC certificate까지 성공한 뒤 capsule policy가 모든 PC에 전파되기 전에 manifest를 한 번만 읽어 실패했다. manifest 준비를 bounded retry하도록 수정했다.

두 번째 실행은 capsule manifest를 통과했지만, 실제 HTTPS PC bundle이 `allowHttpForCanary:false`를 올바르게 보고한 것을 2-domain canary verifier의 입력값 `true`와 무조건 같아야 한다고 비교해 실패했다. HTTP 허용을 단방향 권한으로 수정해 더 엄격한 HTTPS bundle은 허용하고 strict verifier가 HTTP bundle을 허용하지 않도록 유지했다.

세 번째 실행은 다음을 모두 통과했다.

- target PC: 3
- observed failure domain: 2
- public HTTPS Quick Tunnel origin: 3 distinct
- RPC votes: 3
- manifest votes: 3
- directory sources: 3
- capsule executions: 3
- read-only service shells: 3
- proof class: `MAIN_HOST_LOSS_ONLY_NOT_WAN_DOMAIN_LOSS`
- final status: `TWO_DOMAIN_THREE_NODE_HTTPS_QUICK_TUNNEL_CONTINUITY_PROVEN_AND_REVOKED`

종료 뒤 false policy 수신, tunnel URL 제거, cloudflared PID 0, RPC lease 만료, 과거 public origin 비도달, rollout policy 삭제를 확인했다. 메인 서비스는 HTTP 200이며 production traffic, DNS, DB, validator, transaction submission은 변경하지 않았다.

## 3개 독립 WAN live 실행 결과

USB 테더링으로 분리한 세 번째 failure domain을 확보한 뒤 `--require-three-domains` gate로 다시 실행했다. Sync 재기동 뒤 오래된 runtime heartbeat를 안전하게 복구하는 후보 `1.4.109-runtime-heartbeat-null-stale-fallback-default-off-locked`을 세 PC에 배포했다. 이 fallback은 실행 중인 PID와 loopback RPC만 읽으며 validator를 시작하거나 중지하지 않는다.

- target PC: 3
- observed failure domain: 3
- public HTTPS Quick Tunnel origin: 3 distinct
- RPC votes: 3
- manifest votes: 3
- directory sources: 3
- capsule executions: 3
- read-only service shells: 3
- proof class: `THREE_INDEPENDENT_WAN_DOMAIN_READ_ONLY_CONTINUITY`
- final status: `THREE_DOMAIN_THREE_NODE_HTTPS_QUICK_TUNNEL_CONTINUITY_PROVEN_AND_REVOKED`

종료 뒤 세 터널 process, URL, RPC lease와 rollout policy가 모두 제거됐다. 이 결과는 3-WAN 유한 read-only continuity를 증명하지만 임시 origin이 상시 활성화됐다는 뜻은 아니다.

## 해석과 남은 경계

이 결과는 불특정 NAT PC 3대가 outbound HTTPS tunnel을 통해 node identity, RPC quorum, signed directory, stateless read capsule과 service shell을 제공할 수 있음을 실제 경로에서 증명한다. 다만 Quick Tunnel은 개발용 임시 주소이고 시험 후 제거됐으므로 현재 상시 failover endpoint는 아니다.

메인 서버를 실제로 끄기 전에는 stable multi-origin bootstrap, physical Android/Web 연결, Mongo/Redis/session/upload write HA, worker fencing, 별도 outage rehearsal이 필요하다. 따라서 `current_continuity`는 계속 false다.

증거: `evidence/quick-tunnel-discovery-canary-stage-redacted.json`
