# 0.7 공개 원본 선택 분석과 내부 구현 기준

조사 기준: 2026-10-26, Asia/Seoul. 원본 HighLevel의 기존 공개 JavaScript와 공식 문서를 대조했다. 신규 원본 다운로드·계정 로그인·유료 가입·Google 설정 변경·원본 서버 API 호출은 하지 않았다. 레벨 스튜디오 저장소 자체 분석에 REA를 사용하지 않았다. 이 문서의 기능 제안은 원본 서버 구현 회수나 자체 구현 완료를 뜻하지 않는다. 현재 구현 상태와 인수 조건은 `REMAINING-0.7.md`에 구분한다.

## 입력과 범위

REA skill의 JavaScript 선택 분석 지침과 현재 도구 스키마를 읽고 `analyze_javascript_application`에 `source_paths`를 정확히 지정했다. 입력은 `work/rea/public-client-layout`의 150파일이다. 최초 로그인 전 페이지에서 관찰한 URL을 나중에 다시 받은 자료이므로 최초 브라우저 응답 바이트와 동일함까지 입증하지 않는다. 현재 파일 신원은 아래 해시로 고정한다.

| 파일 | bytes | SHA-256 | 선택 이유 |
|---|---:|---|---|
| `js/store.BYRRP5od.js` | 1,519,606 | `0aa5b69a0fe7f772871c1cd7a10e0e2f55042e1d765a2cd4229db6c8e41a53b6` | 캘린더 타입·가용시간·기간/정원 초기화와 기능 식별자 |
| `js/chunk.CjsIUYDu.js` | 1,097 | `d690a04dd66088871c8eea930ddd993017cc56db3231928f40bd5d56c05f003f` | 사용자 캘린더 availability/preferences 화면 경계 |
| `js/chunk.Bru6AKh5.js` | 11,949 | `bbf18e14456e74c14316bf3189548cb1082deb2de3e04b643f42d0d75e1b5d16` | 페이지 편집 이동·asset 종류·custom reports/quiz 분류 |
| `js/chunk.DZdwu-YD.js` | 12,621 | `d6c7a141caafc67e53f75ae0ba1769e22e385fc9d11e6c7b3526125e2e34ca39` | reporting/편집 앱의 원격 모듈 선언 |
| `js/config.DJzFoV9d.js` | 39,794 | `6a218b78dbfe57b30fb90868f44490e202447cb07bf71257d3cf5fb21651e3e0` | page builder 환경/원격 URL 구성 경계 |

선정 중 `chunk.oN07gYIo.js`의 recurring 토큰도 보았으나 실제 문맥은 반복 할 일 번역이어서 반복 청구의 근거로 사용하지 않았다. 파일명·단어 일치만으로 기능을 확정하지 않는다. 원격 앱 URL 선언은 해당 원격 앱 구현 전체가 보관됐다는 뜻이 아니다.

전체 artifact SHA-256: `77389684cc1a43dfd8640ab6f1b72b66cbe33ea755d4c0a1206ac208f15cd668`.

## 실제 REA 결과

프로필은 heap 1,536MiB, 소스별 180,000ms, semantic nodes 전체 100,000/파일별 60,000, unknowns 전체·파일별 40,000이다. summary는 표시량만 줄이며 원본 실행을 하지 않는다.

| 항목 | 결과 |
|---|---|
| parent Evidence | `ev_8a74c39430038b86bf1137e8a39bbcba70eaf6750796780eb02d1a9670210f7b` |
| summary Evidence | `ev_8565bbd8da023729e6b9439935dddf3227d8c90192a115b1fe4f9e48de3bb94f` |
| 분석 파일/bytes | 5 / 1,585,067 |
| AST 방문 / findings | 298,669 / 1,160 |
| parse failures / invalid UTF-8 | 0 / 0 |
| 미선택 파일 / application unknowns | 145 / 145 |
| semantic unknowns | 40,000, 보존 한도 도달 |
| application graph | partial, truncated=false |
| semantic graph | partial, truncated=true |

원격/동적 속성·호출·미선택 의존성·서버 계약은 여전히 미확인이다. 파싱 오류가 없다는 사실을 전체 의미 복구로 확대하지 않는다.

| trace | Evidence | 실제 결과와 의미 |
|---|---|---|
| `RoundRobin_OptimizeForAvailability`, exact string/outgoing | `ev_805425e12adc741c90d4d5bd277d220ce4860cf142b520b1d8c020a06ed68a73` | no-match, source graph partial. 원문에는 토큰이 있으므로 기능 부재로 해석하지 않는다. |
| `page-builder-edit`, exact string/outgoing | `ev_a8054a8a5ebe9e8a67a1e1900c9880a12a1cf1b4afe043985dc67442ccb0a516` | no-match, source graph partial. 동적 화면 연결의 전체 실행 경로는 미확인이다. |
| `reportingApp`, exact string/outgoing | `ev_d125e733db633d27a3628050b0033c9a2f6da7497ab7efc81842eae681f9a15b` | no-match, source graph partial. 보고서 기능 부재를 뜻하지 않는다. |
| 반환된 builder endpoint node ID, incoming | `ev_7f7c8ca8eee5696b98fa0b8f2947cffd44ee35f0db28d1b4b2e60d4eb9609e4e` | 1 match, 4 nodes, 3 edges, 관측 사실6/추정1. 정적 그래프 관계이며 실제 화면 진입 성공은 아니다. |

마지막 trace의 seed는 REA facts view가 실제 반환한 `jag_node_224a5436d85b502c78cb8de8666c2dca108d00cdd3d1abdee925e67dda685a88`이다. 임의 주소를 만들지 않았다. facts view Evidence는 `ev_30dabe7ae7a09de2059e238ac12612e2e9b4d1db6617a7b072eed0f9375b3cd0`, 해당 endpoint 관찰은 `chunk.Bru6AKh5.js` line1 column6161–6175의 `ast-static-analysis`다. trace로 도달한 모든 노드를 builder의 업무 로직으로 간주하지 않는다.

원시 Evidence bundle은 소스 밖 `work/rea/rea-internal-selected-0.7.json`에 보관했다. **230,414,300 bytes**, SHA-256 `479e51fc095b41b1c42301ef3ce149315af454e88448db7284d6c9ec0185b24d`. export의 records23/unknowns0은 ledger 계수이며 위 semantic unknown 40,000개가 해소됐다는 뜻이 아니다. 원문 코드와 대형 bundle은 GitHub 자체 구현 소스에 넣지 않는다.

## 예약: 원본 근거와 구현에 필요한 계약

현재 보관 store의 디코딩된 문자 위치에서 두 Round Robin 방식 enum(@643882, @643956), `openHours`(@647075), slot duration/interval 기본값30(@648496 부근), 예전 철자의 슬롯 정원 기본값1(@648576)을 확인했다. 이는 클라이언트 초기화의 정적 관찰이다. 운영 서버가 같은 기본값·정원·충돌 정책을 강제하는지 직접 재현하지 않았다.

[공식 Calendar API](https://marketplace.gohighlevel.com/docs/ghl/calendars/update-calendar/index.html)는 duration/interval, 전후 buffer, 최소 사전 통보, 예약 가능 기간, 담당자, 슬롯/일 정원을 구분한다. 현재 API는 `appointmentPerSlot`을 사용하고 예전 오타 필드는 deprecated다. `openHours`도 별도 Availability API 사용을 권장하는 이전 호환 필드이므로 이를 원본 최신 데이터 모델 전체로 단정하지 않는다.

[가용시간 문서](https://help.gohighlevel.com/support/solutions/articles/48001155718-understanding-calendar-availability-settings)는 슬롯 길이와 간격, 업무시간, 정원, 사전 통보와 예약 범위를 설명한다. [공유 schedule](https://help.gohighlevel.com/support/solutions/articles/155000006215-schedules-centralized-availability-management)은 주간 시간과 날짜 예외, 담당자 시간대, 여러 캘린더의 일정을 함께 다룬다. 내부 구현에서도 시간대·날짜 예외·경계 시각을 명시적으로 검증할 수 있다.

[Round Robin 분배](https://help.gohighlevel.com/support/solutions/articles/155000001484-round-robin-calendars-appointment-distribution-logic)는 availability 우선과 equal distribution을 구별한다. 후자는 선택 월의 예약 수, 동률 때 팀 순서, 3개 앞선 담당자의 가용성 제한을 설명하며 담당자/모드 변경 시 계산 초기화도 명시한다. 단순 순환이나 전체 누적 최소 예약수 방식은 다른 자체 계약이다. 원본 전체와 동일하다고 쓰려면 이 차이까지 검증해야 한다.

[정원/겹침 변경](https://ideas.gohighlevel.com/changelog/smarter-slot-availability-for-overlapping-appointments)은 예약이 겹치는 슬롯마다 정원을1 줄이고 정원 도달 시에만 닫는 동작을 설명한다. [전후 buffer](https://help.gohighlevel.com/support/solutions/articles/155000001019-pre-and-post-buffers)는 기존 예약과 신규 예약 양쪽의 준비/마감 시간을 고려하고 한 담당자의 다른 캘린더에도 영향을 줄 수 있다고 설명한다.

**자체 인수 조건:** 조회와 예약 명령이 같은 규칙을 사용하고 저장 CAS 이후 다시 검사한다. 자정/일광절약시간·IANA 시간대·닫힌 날·분할 업무시간·날짜 예외·버퍼 접점·예약 취소·수정 시 자기 예약 제외·다른 담당자/캘린더 충돌·정원 마지막1자리 동시 요청을 시험한다. 담당자는 소유자가 관리하는 내부 자원이며 독립 직원 계정을 발급하거나 audience를 넓히지 않는다.

## 페이지 편집기

공개 파일에서 page 편집 이동과 원격 builder 연결을 관찰했지만 원격 편집기의 전체 drag/drop·레이아웃 엔진은 보관되지 않았다. [공식 drag/drop](https://help.gohighlevel.com/support/solutions/articles/155000005796-enhanced-drag-and-drop-with-auto-hierarchical-layout-in-funnel-website-builder)은 Section→Row→Column→Element 자동 감싸기와 동일 row 안 column 재정렬을 설명한다. [사이트 개요](https://help.gohighlevel.com/support/solutions/articles/155000001633-sites-overview)는 계층·여백·가시성 설정을 설명하고, [미리보기](https://help.gohighlevel.com/support/solutions/articles/155000005428)는 desktop/mobile 확인 후 저장/게시 흐름을 설명한다.

레벨 스튜디오의 제한된 블록 모델에는 drag 순서 변경·스타일 허용 목록·모바일 미리보기를 독립 구현할 수 있다. 임의 CSS/HTML 실행 없이 색/여백/정렬/너비/버튼 스타일을 검증하고 preview와 게시 렌더가 같은 모델을 사용해야 한다. 전체 원본의 자유 중첩 계층과 같은 기능으로 표현하지 않는다. 기존 발행 revision을 초안 편집으로 바꾸지 않는 검증도 유지한다.

## 내부 보고서와 퀴즈 분석

`chunk.Bru6AKh5.js`에는 사용자 보고서 asset 분류(@1599), `chunk.DZdwu-YD.js`에는 reporting 원격 앱 참조(@6817)가 있다. 원격 앱 선언은 집계 SQL·금액 계산·캐시 정책 복구가 아니다.

[공식 Custom Reports](https://help.gohighlevel.com/support/solutions/articles/155000003965-how-to-create-custom-reports-and-schedule-reports)는 저장한 기간/필터 유지, widget·테마·페이지, PDF, 외부 이메일 snapshot을 설명한다. 문서는 builder와 이메일/광고 데이터의 시간대가 다를 수 있음을 명시한다. **일반 Custom Report CSV를 이 문서가 보장한다고 쓰지 않는다.** 자체 내부 보고서는 실제 저장 데이터만으로 필터/집계/CSV를 만들고 기준 시간대·기간 경계를 명시할 수 있다.

[Membership assessment 문서](https://help.gohighlevel.com/support/solutions/articles/48001224429-how-to-create-assessments-quizzes-for-membership-courses)는 과정/결과/기간 필터를 적용한 CSV와 응시 검토를 설명한다. 소규모 즉시 파일과 대규모 이메일 전달을 구별한다. 자체 구현에서는 owner가 보는 실제 시도·당시 퀴즈/점수·고객/과정·수료 이력의 필터/CSV를 만들 수 있다. 독립 학생 로그인이나 외부 이메일 전달까지 구현했다고 표현하지 않는다.

**자체 인수 조건:** 목록과 집계·CSV가 같은 필터를 사용한다. 빈 결과는0, 보관/병합·취소/반전 포함 정책, 부분 수납과 잔액, 통과율 분모·시도별/고객별 구분, CSV 전체 행·수식 방어, 날짜 시작 포함/종료 제외, 새로고침 후 저장 필터 유지와 사용자 격리를 검증한다. 방문/광고/발송 수치를 저장 근거 없이 만들지 않는다.

## 할인·세금·반복 청구 초안

[공식 invoice 문서](https://help.gohighlevel.com/support/solutions/articles/155000004042)는 정액/비율 할인, 항목 세금, 초안 저장, 실제 preview를 구분한다. 결제 공급자에 따라 기능이 달라질 수 있으며 자체 계산의 적용 순서·반올림은 별도로 명시해야 한다. 원본 모든 tax inclusion·지역 세율·수수료를 복구한 것은 아니다.

[반복 invoice 문서](https://help.gohighlevel.com/support/solutions/articles/48001219440)는 템플릿·생성 이력·주기·종료와 draft/active/scheduled/canceled/completed를 설명한다. 본문의 active 수정 제한과 FAQ의 수정 가능 설명은 일관되지 않아 원본 런타임으로 확인하지 않은 편집 허용 범위를 확정하지 않는다.

외부 결제/발송 없이 구현할 수 있는 범위는 **내부 청구 계산과 반복 초안 생성**이다. 할인 한도·세금 기준액·정수 통화·발행 snapshot을 검사하고 template ID+발생 기간의 고유 키로 재시도/재접속 시 중복 초안 생성을 막는다. 월말·윤년·종료일·시간대·수정/중지·catch-up 상한을 명시한다. 기존 발행 문서/수납 원장을 새 계산으로 소급 변경하지 않는다. 기존 hourly workflow runner가 새 반복 청구도 처리하는지는 별도 통합 검증이 필요하다.

## 외부/접근 경계와 백업 준비

실제 이메일/SMS/전화·소셜, 카드/환불/구독 결제, AI, 외부 캘린더·리뷰 공급자 연결은 인증/동의·지원 도구·계정 준비와 실제 성공 검증이 필요하다. 이번 조사에서 계정에 접근하거나 연결을 만들지 않았다. Google 전용 프로젝트 증액 신청은 승인 대기 이력을 유지하며 기존 Google 프로젝트를 바꾸지 않는다. owner-private audience, 기존 per-owner identity/DB/R2, 독립 학습자 로그인 미제공을 유지한다.

읽기 전용 준비 점검 시 E 여유는 **354,850,050,048 bytes(약330.48GiB)**로100GiB보다 많았다. canonical `E:\RIGOON_STUDIO\레벨 스튜디오`와 `PC_INSTALL_BACKUPS\rigoon-level-studio`, 동봉 Node와 SHA 기반 immutable checkpoint 절차가 존재한다. 이는0.7 백업 완료가 아니다. 새로운 코드 확정 후 root가 GitHub/Sites 반영·새 checkpoint·설치 패키지·새 C 복원을 실제 실행해야 한다. 이번 조사에서는 E 파일·복원 목차를 변경하지 않았다.
