# 기본 소스 검증 보고서

검증일: 2026-08-09 (기본 구문 검증 2026-08-06, DRY RUN 통합 재검증 2026-08-09)

## 수행 결과

| 구분 | 명령 | 결과 |
|---|---|---|
| PHP 구문 | `find web/app web/public -name '*.php' ... php -l` | 통과 |
| 브라우저 JavaScript | `node --check web/public/assets/js/*.js` | 통과 |
| Node.js | `node --check orchestrator/src orchestrator/test` | 통과 |
| PHP 독립 스모크 | `php scripts/smoke_test.php` | 통과 |
| Node 테스트 | `node --test orchestrator/test/*.test.js` | 4개 통과 |
| Python | `python3 -m py_compile scripts/generate_assets.py` | 통과 |
| 아이콘 생성 | 임시 1024×1024 PNG로 생성 | Android 5 + iOS 15 통과 |
| Seed 로그인 | `password_verify('ChangeMe123!', hash)` | 통과 |
| CodeIgniter 부팅 | `php spark routes` | 전체 라우트 로드 통과 |
| MariaDB 재설치 | `schema.sql` + `seed.sql` 연속 2회 | 매회 정상 재생성 |
| DRY RUN 통합 | 로그인 → 빌더 → PHP → MariaDB → Node → Worker | 성공, 진행률 100% |
| 로그·산출물 | API/DB 로그, Mock AAB, manifest, HTTP 다운로드 | 로그 11건, 산출물 2건, SHA-256 일치 |

## 검증한 주요 규칙

- 앱 이름, 소문자 역도메인 패키지명·번들 ID
- 버전 형식과 1 이상의 플랫폼 빌드 번호
- 메뉴 1~5개, ID 중복, 이름 길이, 지원 모듈
- 웹뷰·API 목록의 HTTP/HTTPS URL
- 정적 화면 내용과 카메라·위치 권한 설명
- 잘못된 작업 요청과 우선순위 정규화

## 코드 점검 중 수정한 주요 문제

- PHP가 커밋하지 않은 `app_versions`를 Node가 조회하던 외래키·락 문제
- 출시 API 경로 누락
- 완료된 빌드 상세 화면의 반복 새로고침 가능성
- 잘못된 seed 관리자 비밀번호 해시
- 동일 빌드의 중복 출시 작업
- 출시 이력이 있는 스토어 연결의 물리 삭제 문제
- CodeIgniter `Config` PSR-4 네임스페이스 누락
- 재빌드 시 산출물 DB 중복
- Android INTERNET 권한과 네이티브 applicationId/namespace 반영
- iOS Bundle Identifier 반영
- API 목록 URL 입력란이 숨겨지는 화면 오류
- `splitDebugInfo`와 난독화 옵션 결합 오류
- 취소 요청 중 워커가 중단된 작업이 재시도되는 문제
- 중단된 스토어 업로드를 자동 재시도해 중복 전송할 위험
- 릴리스 작업에 worker lock/heartbeat가 없어 장시간 업로드를 오판할 가능성
- 업로드 완료된 플랫폼 빌드 번호의 재사용 가능성
- 스토어 자격증명 검증 실패 시 개인 키가 세션에 재저장되는 위험
- 조직 역할 데이터가 실제 쓰기 라우트에 적용되지 않은 권한 상승 위험
- 정지된 사용자·조직이 기존 세션으로 계속 접근할 가능성
- CodeIgniter 4.7.4 부팅을 막던 Modules/Constants/Kint/Routing/View/Format 설정 계약 누락
- `BaseController::$helpers` 프로퍼티 타입의 프레임워크 부모 클래스 충돌
- `schema.sql` 재적용 시 남던 결제·구독·요금제 테이블 DROP 누락

## 현재 환경에서 미수행

- `DRY_RUN=false`의 `flutter analyze`, `flutter test`, 실제 AAB·IPA 컴파일
- Android 업로드 키와 iOS 인증서·프로비저닝 서명
- 실제 Google Play 및 App Store Connect 계정 업로드
- 다중 워커의 `SKIP LOCKED` 경합 부하 테스트
