# Code Remote Manager 출시 전 현황

- 갱신일: 2026-08-03
- 전체 공개 출시: **NO-GO**
- 최근 완료 출시 검증: signed Android 0.2.0 실기기 설치·연결 (2026-07-18)
- 상세 근거: [2026-07-17 감사 기록](audits/2026-07-17-pre-release-audit.md)과 Git 기록

이 문서가 유일한 활성 진행 현황이다. 새 세션은 `AGENTS.md` 다음 이 문서의
`현재 패치`만 읽는다. 완료된 과정은 Git 기록과 감사 기록에만 보존한다.

## 한눈에 보기

| 영역 | 상태 |
| --- | --- |
| 핵심 기능과 P0-A~P0-E 보안 | 완료 |
| Backend 직접 외부 노출 차단 | 완료 (`8e35a46`) |
| Tailscale Backend/Funnel 자동 차단 | 완료 (`91507ff`) |
| source/Windows/Android `1.0.0` 메타데이터 기준선 | 완료 |
| Windows unsigned RC 수명주기 | 완료 (`21dcc2f`) |
| Android 서명 RC | 완료 (`37bdb80`) |
| 공개 정책·지원·라이선스·심사용 데모 소스 | 완료 (`edd3d35`) |
| 공개 사이트 무료 `1.0.0` 제품·정책·라이선스 동기화 | 배포 완료 (2026-07-30 갱신) |
| Google·Play 내부 스테이징 + Windows 다운로드 사이트 준비 | **현재 작업** |
| 앱 구독 기반 준비 | 무료 출시 뒤 후속 버전 |
| iOS 앱·StoreKit 구현과 출시 | 별도 후속 프로젝트 |

## 세션 규칙

1. `git status --short`와 `git log -3 --oneline`을 확인한다.
2. `현재 패치` 하나만 진행하고 관련 코드·테스트와 지정된 문서 부분만 읽는다.
3. `ㄱ`, `continue`, `next patch`는 읽기 전용 점검과 승인된 저장소 작업만 허용한다.
4. 배포, 서버 재시작, Tailscale 변경, 서명, 결제 상품 등록, 스토어 제출은 별도 승인이 필요하다.
5. 패치 완료 후 이 문서와 관련 권위 문서를 갱신하고 검증한 뒤 커밋한다.
6. `현재 패치`를 다음 항목으로 바꾼 뒤 실제 다음 작업은 시작하지 않고 보고한다.
7. 새 handoff, next-patch, 세션 기록 또는 중복 체크리스트를 만들지 않는다.

## 현재 패치

### 운영자 승인 Google·웹사이트 스테이징

목표:

- 키 파일 없이 최소 권한 Cloud Run·Firestore·Pub/Sub·Scheduler와 Play 내부 테스트 구성을 준비한다.
- 홈페이지에 검증된 Windows `.exe` 다운로드를 제공하고, `.exe` 없이 직접 설치하는 사용자를 위한
  안전한 셀프 설치 설명서를 한국어·영어로 제공한다.
- 실제 공개 변경 전 미리보기와 운영자 승인을 받고 프로덕션 제출·출시는 하지 않는다.

현재 상태:

- Task 4에서 Google Play Billing 9.1.0, Google Auth Library 11.0.0, Firestore Client 8.7.0의
  버전·라이선스·공식 출처 고지를 실제 출하 의존성과 맞췄다.
- 추적 출시 입력, verifier 컨테이너, unsigned Android release AAB에서 민감 파일·내용과 로컬 경로를
  검사했고, PWA 번들에 남던 loopback fallback URL도 제거했다.
- verifier 이미지는 production package 122개만 포함하고 테스트 소스와 민감정보가 없음을 확인했다.
- 감사용 AAB는 package `com.makecdev.coderemotemanager`, versionCode 2, targetSdk 36, 4개 ABI,
  Android dependency 143개와 16 KB 정렬을 통과했다.
- 감사용 AAB의 verifier 주소는 명시적 placeholder이며 unsigned이므로 업로드 후보가 아니다.
- Windows `1.0.0` unsigned 후보와 source ZIP·manifest를 만들고, 홈페이지를 `EXE 간편 설치`와
  `EXE 없이 직접 설치` 두 선택지로 축약했다. manifest 검증은 선택 안내 안에 숨겼다.
- 로컬 Firebase 미리보기에서 한국어·영어 전환, 390×844 레이아웃, 48px 설치 버튼과 다운로드
  4개 경로의 HTTP 200을 확인했다. 일반 페이지의 MakeCdev 설명은 제거하고 개인정보처리방침의
  운영자·문의 항목에만 남겼다.
- Firebase Spark가 실행 파일 업로드를 차단해 raw `.exe` 배포는 공개 반영 전에 실패했다. 운영자 승인에
  따라 검증된 EXE를 ZIP 하나로 감싸 무료 Hosting에 배포하고, raw `.exe`는 올리지 않는다.
- 사이트 배포, Google Cloud·Play Console 변경, 서명·업로드는 아직 수행하지 않았다. ZIP 방식의
  홈페이지 공개 배포는 운영자가 승인했다.
- 다음 범위는 `docs/superpowers/plans/2026-08-01-pro-policy-release.md`의 Task 5뿐이다.

진행:

1. 외부 상태를 바꾸기 전에 대상 리소스·Play Console·사이트 변경안을 제시하고 운영자 승인을 받는다.
2. 승인 뒤 키 없는 전용 런타임 계정과 Play 조회·승인, Secret 접근, Firestore 최소 권한을 구성하고
   인증된 RTDN push·정기 reconciliation·rate limit·alert·rollback revision을 검증한다.
3. Play Console에 `pro_multi_account` 비소모성 상품, license tester, RTDN, 정책 URL, Data Safety,
   content rating과 내부 트랙을 구성하되 프로덕션에는 제출하지 않는다.
4. Windows installer 후보를 만들고 파일 identity·SHA-256·서명 상태를 검증한다. 홈페이지 다운로드와
   셀프 설치 설명서의 미리보기를 만든 뒤 승인받은 내용만 배포하며 unsigned이면 정확히 표시한다.
5. 깨끗한 브라우저에서 HTTPS 페이지·다운로드·설명서 링크를 검증하고 비밀정보 없는 운영 근거만 기록한다.

완료 조건:

- Google staging 리소스와 Play 내부 테스트 설정이 최소 권한·무키 방식으로 검증됨
- 홈페이지 다운로드가 검증된 `.exe`를 가리키고 셀프 설치 설명서가 로컬 경로·비밀정보 없이 동작함
- installer의 서명 여부와 보안 안내가 실제 산출물 상태와 정확히 일치함
- 사이트 변경은 승인된 미리보기와 깨끗한 브라우저 검증을 통과함
- 프로덕션 제출·출시 없이 다음 통합 출시 게이트 전에 중지함

## 무료 출시 마감 순서

1. 기존 무료 `1.0.0` baseline과 공개 자료 — 완료, 결제 범위에 맞춰 재검토 필요
2. Android Pro 설계·운영 문서와 구현 계획 — 완료
3. 구매 검증 서비스, 로컬 권한 증명, 무료 1개·Pro 5개 계정 제한 — 완료
4. Android Play Billing과 구매·복원 UX 구현 — 완료
5. 패키지 경계, embedded PWA hash와 dependency·개인정보 audit 재검증 — 완료
6. 최종 `1.0.0` 후보 생성, manifest와 Play 결제 내부 트랙 검증
7. 별도 승인 후 Android AAB 서명과 새 설치·구매·복원·환불 실기기 검증
8. 앱 내 약관·개인정보·지원과 공개 사이트·Store Listing·Data Safety·환불 문구 동기화
9. `Try review demo`, 390×844, App Access와 결제·정책 최종 정합성 확인
10. 별도 승인 후 Google Play 제출

## 후속 구독 패치 순서

1. 구독 상품·CRM 계정 보안 설계
2. CRM 인증과 hosted entitlement 서비스 기반
3. Android 앱 내 구독과 공통 billing adapter
4. 서버 검증과 구독 수명주기
5. Android·Windows 권한 동기화와 결제 UX·운영·정책
6. iOS StoreKit adapter와 실제 iOS 앱 구현·서명·제출

구독은 후속 버전에서 Android를 먼저 구현하고 iOS StoreKit으로 확장한다. CRM 구독 계정은
Codex 실행 계정과 완전히 분리하며 hosted account/entitlement 서비스는 별도 보안 설계 승인 뒤에만
구현한다. 현재 무료 앱의 공개 문서에는 미래 결제·계정 동작을 현재 기능처럼 표시하지 않는다.

## 사용자가 결정해야 할 항목

- 앱별 지원·개인정보·보안 연락처 `coderemote@makecdev.com`의 mail routing 생성과 수신 시험
- 무료 `1.0.0` 출시 국가. 지원 언어는 한국어·영어이며 연령 등급은 최종 바이너리 기준으로 결정
- 인앱 결제 도입에 따른 사업자등록번호·통신판매업 신고정보·판매자 주소 공개와 환불 정책의
  대한민국 법률 적용 범위
- 준거법과 최종 법률·보안 검토 범위

현재 공개 정책 판단 근거도 유지한다. Google Play 개인 개발자 계정은 법적 이름·법적 주소를
Play Console에서 검증하되 공개 개발자명 `MakeCdev`를 유지할 수 있다. 무료·인앱 결제 없음이면
전체 주소 공개가 요구되지 않지만 대한민국 개인 개발자의 공개 개발자 전화번호는 필요하다.
유료 앱·인앱 결제 시 사업자등록번호·통신판매업 신고정보와 전체 주소 공개 범위를 재확인한다.

개발자 운영 analytics·crash reporting은 현재 없다. 현재 ML Kit 범위는 기기 정보·앱 정보·기기
또는 설치별 식별자·성능 지표·API 구성·이벤트·오류 코드이며, QR 영상과 결과는 기기 내에서
처리되어 Google 서버로 전송하지 않는다. 지표는 HTTPS로 전송되고 제3자에게 공유하지 않는다.

## 매 패치 필수 검증

```powershell
npm.cmd test
npm.cmd --workspace apps/pwa exec vite build
npm.cmd audit
git diff --check
```

출시 마감에는 installed-layout, clean-user, 서명, Android 실기기와 최종 manifest 검증을
추가한다. 빌드 성공만으로 출시 게이트를 완료 처리하지 않는다.

## 완료 요약

- Android Play Billing과 Pro 구매·복원 UX는 구매 토큰을 네이티브 경계 안에 유지하고 무료 1개/Pro 5개
  계정 제한, 현지화 UI, 복원·잠금 상태, unsigned AAB 및 390×844 검증까지 완료했다.
- P0-A~P0-E 인증·권한, 중복 실행 방지, 첨부·로그·삭제 수명주기와 외부 노출 차단을 완료했다.
- Windows `0.2.0` 후보는 clean-user 설치·업데이트·재시작·삭제와 사용자 데이터 보존을 통과했다.
- signed Android `0.2.0` 기준 후보는 SDK·4개 ABI·64-bit·16 KB·실기기 연결 검증을 통과했다.
- source·Windows·Android 출시 버전을 `1.0.0`, Android `versionCode`를 `2`로 통일하고
  dependency audit를 통과했다. 최신 후보 재패키징·서명·실기기 검증은 다음 출시 게이트다.
- 공개 개인정보·약관·지원·삭제·licenses URL과 설치 패키지의 제3자 고지를 검증했다.
- `https://coderemotemanager.makecdev.com`의 제품 소개·기능·환경·보안·FAQ, 첫 `C`만 강조하되
  글자 간격이 분리되지 않는 워드마크, `© 2026 MAKECDEV` 푸터와 문서별 수정일을 Firebase Hosting에 배포했다.
  양쪽 Hosting URL의 6개 경로 HTTP 200과 모바일 가로 넘침 없음도 확인했다.
- licenses와 출시 패키지에 Lucide·Feather 기반 인터페이스 아이콘, PWA 직접·전이 의존성
  168개의 고지를 포함하고, 고지가 stale이면 출시 준비와 Windows 패키징을 중단하도록 검증한다.
  공식 메일 `coderemote@makecdev.com`의 routing 생성과 실제 수신 시험은 사용자 결정 항목에 남아 있다.
- Pro 출시 입력과 감사 산출물은 Google Play Billing 9.1.0, Google Auth Library 11.0.0,
  Firestore Client 8.7.0 및 Android dependency 143개의 고지와 일치한다. 민감정보·로컬 경로·
  loopback fallback을 거부하며 verifier image와 unsigned AAB의 경계를 확인했다.
- Android 심사용 synthetic demo 소스와 390×844 핵심 흐름을 검증했다. 최신 최종 패키지 반영은
  출시 마감 단계에 남아 있다.
- 턴 시작·중단·대기열 경합을 실제 상태로 조정하고 미확정 실행·중복 실행을 차단했다. 채팅 간 오배달은
  런타임 라우팅과 세션 경계에서 이중으로 차단한다.
- 답변 완료 뒤 직접 보낸 메시지는 220ms 동안 헤더 아래 24px로 이동해 새 답변을 시작한다.
  이때 공백은 해당 전송에서 목표 위치까지 부족한 높이만 1회 계산하며 빈 공간으로는 더 내려가지 않는다.
  추가 공백이 없는 짧은 새 채팅은 제한을 만들지 않아 실제 최하단에 안정적으로 붙고,
  실행 중 대기 메시지는 기존 스크롤 위치를 유지한다.
- 계정 주소 모자이크는 원래 아이디 폭을 유지하는 오버레이로 `@` 앞부분만 가리고,
  도메인은 선명하게 표시한다. 390×844 화면과 집중 회귀 테스트로 확인했다.
- 개인정보 설정의 `마지막 채팅 계정 표시`는 기본으로 켜지고 기기별 선택을 저장한다.
  끄면 계정 바와 채팅 상단 24~27px 오프셋을 함께 제거한다.
- `release:prepare`는 clean source에서 후보 세트를 만들고 내장 PWA·hash·toolchain·manifest를 검증한다.

상세 완료 근거는 감사 기록과 Git 테스트·커밋에만 보존한다. 이 문서에는 세션 로그를 추가하지 않는다.
