---
status: ANDROID_VERIFIED_DIRECTORY_COMPILED_AND_SYNTHETIC_OUTAGE_INTEGRATION_PASSED_DEFAULT_OFF
production_traffic_changed: false
production_failover_enabled: false
router_mapping_changed: false
main_server_stopped: false
operator_signing_used: false
validator_signing_used: false
production_continuity_proven: false
---

# Android 검증 디렉터리와 메인 장애 통합 시뮬레이션

## Android native failover staging

`E:\aisfor-android`에 `VerifiedServiceDirectoryStore`를 추가하고 기존 `MainActivity` 장애 경로에 기본-OFF hook을 연결했다.

- `plai-permissionless-manifest/v1` canonical SHA-256 commitment 재계산
- `plai-rpc-quorum-attested-manifest-anchor/v1` 및 `rpc-quorum-attested-node-votes` proof type 요구
- 서로 다른 node key 최소 3개와 quorum vote 3개 요구
- bundle의 Ed25519 SPKI 공개키 DER, nodeKeyId, claim canonical payload, 64-byte signature를 Android native crypto provider로 직접 검증
- Ed25519 provider가 없는 기기는 우회하지 않고 fail-closed
- endpoint 최소 3개, node key/endpoint ID 중복 거부
- production HTTPS만 허용하고 HTTP는 명시적인 canary 입력에 한정
- manifest/endpoint lease 만료, sequence rollback, 같은 sequence equivocation 거부
- 현재 cache를 지워도 highest sequence/commitment rollback floor는 유지
- 서로 다른 failure-domain endpoint를 우선 시도
- gateway health의 node key와 directory node key 일치 요구
- service capsule release commitment와 directory release hash 일치 요구
- capsule controls가 read-only/stateless/secret-free/no-fs/no-network/no-db/no-signing/no-transaction인지 재확인

`BuildConfig.PLAI_SERVICE_FAILOVER_ENABLED`는 `false`다. 신뢰 가능한 finalized anchor와 독립 bootstrap이 아직 실제 배포되지 않았으므로 앱의 production 시작 경로는 바뀌지 않았다.

Android debug APK 빌드는 성공했다.

- APK: `E:\aisfor-android\app\build\outputs\apk\debug\app-debug.apk`
- bytes: `8937262`
- SHA-256: `2792cf3cf92bbf4ce8d3723d9a065bb18615c332c51279d60e0505f93e3eb016`
- directory verifier SHA-256: `fdc4c0ff58f6361d83a87312be404377ede159f2a249eea2dad141554299c570`

## 서명 manifest node vote

`E:\aisfor\services\signedManifestVoteProtocol.js`에 PC 노드용 Ed25519 manifest vote를 추가했다. operator/validator key를 재사용하지 않는다.

- manifest commitment, chain ID, sequence, anchor block number/hash, 짧은 lease를 node key로 서명
- admission된 node key만 허용
- 이미 검증된 3-node RPC block quorum과 정확히 같은 block만 허용
- 중복 node key vote 제거, 최소 3표, 동률 거부
- 변조·미허용 키·RPC block mismatch 거부

self-test는 3-of-3 vote anchor를 통과했고 operator/validator 서명과 chain write는 사용하지 않았다.

## 합성 메인 장애 통합 시험

`E:\aisfor\scripts\resilience-main-outage-inmemory-simulation.js`는 외부 네트워크·DB·DNS·파일 저장 없이 4개의 임시 PC node identity로 다음 흐름을 한 프로세스 안에서 검증했다.

1. 동일 checkpoint에 대한 Ed25519 RPC attestation 3-of-3
2. endpoint manifest에 대한 admitted node vote 3-of-3
3. finalized RPC block과 vote anchor가 일치하는 endpoint directory 검증
4. 한 endpoint circuit open 후 서로 다른 failure domain 두 곳으로 failover order 생성
5. read-only capsule에서 RPC certificate 3-of-3 재검증
6. 4096-byte payload AES-256-GCM 암호화 후 세 failure domain에 복제
7. 한 replica 상실 후 네 번째 PC가 deterministic repair winner가 되어 복구
8. 암호문 hash와 복호화 평문 hash 일치
9. 사용자 Ed25519 서명 event 두 개로 projection을 빈 상태에서 재구성

증거는 `evidence/main-outage-inmemory-integration-redacted.json`에 저장했다.

## 정확한 경계

이 시험은 protocol integration proof이지 production outage proof가 아니다. 실제 완성을 선언하려면 아직 다음이 필요하다.

1. 임의 PC 사이 signed manifest vote와 endpoint directory의 live peer 교환
2. Android가 사용할 독립 bootstrap 또는 peer discovery 최소 3경로
3. PC public endpoint의 HTTPS/TLS 또는 동등한 native-authenticated transport
4. 명시적으로 승인된 유한 lease 라우터 canary와 자동 mapping 삭제 확인
5. 별도 승인된 메인 서버 격리 시간에 Android 및 실제 PC로 E2E 연속성 증명

Web/TWA는 raw HTTP public-IP PC relay를 전체 app origin으로 사용할 수 없다. Web 연속성은 다중 HTTPS origin/app-shell 배포가 별도로 필요하다.
