연결 중

다시 연결

운영 규칙

최우선 · 회원 발송시간

23:00~09:00 금지
  • 매일 한국시간 23:00부터 다음 날 09:00 전까지 회원 대상 발송을 금지합니다. 허용 시간은 09:00 이상, 23:00 미만입니다. 예약 자동화·운영자 단건·MCP·Codex·실제 전화번호 테스트도 예외가 아닙니다.
  • 회원 알림톡·SMS/LMS·이메일·전자계약 서명요청에 공통 적용합니다. 기존 업무별 제한이 더 엄격하면 그 제한도 유지합니다. 운영자·시스템 점검 메일과 원본 조회·후보 준비는 별도입니다.
  • 야간 감지는 발송완료나 실패로 처리하지 않습니다. 같은 후보·승인·고정 키를 보존하고, 09:00 이후 기존 처리기가 현재 회원·수강권·취소·서명·기존 발송을 재검증합니다. 접수 완료·불명확 건은 다시 보내지 않고 별도 09:00 중복 스케줄러도 만들지 않습니다.
  • 작업 시작뿐 아니라 실제 전송 직전의 한국시간을 다시 확인합니다. 처리 중 23:00을 넘으면 전송 전에 보류합니다. 회원 대상 실제 발송 없이 23:00·09:00 경계, 중복방지·보류 상태와 운영 배포를 검증합니다.
  • 전환 시각에 이미 계약 초안이 작성됐다면 기존 계약·원장을 보존하고 운영자가 같은 건을 대조합니다. 재개를 위해 계약을 숨기거나 재생성하지 않습니다. 날짜별 강사레슨 승인의 기존 기한도 유지합니다. 외부 서비스 관리자 화면에서 직원이 직접 보내는 경우에도 이 운영규칙을 준수합니다.
상태·원천2026-10-22 확정. 상위 AGENTS.md와 공통 member_dispatch_kst_0900_2300_v1 정책을 기준으로 알림톡 큐·홀딩·StudioMate 계약/문자·이폼싸인 처리기에 적용합니다. 원천은 실제 KST와 기존 canonical 후보·작업·발송 원장입니다. 구현·검증·운영 반영 결과는 이번 배포 보고서와 release.json으로 구분합니다. 다음 조치: 정상 주간 실행의 보류 해제 관찰. 회원 대상 야간 실발송 테스트는 하지 않습니다.

현재 운영 기준

기록 원칙새 규칙은 ARCHIVE CORE 운영규칙 탭에 먼저 기록
Notion 사용과거 참조·프라이빗 차트 표시·기존 회원 안내에 사용. 새 운영규칙의 기준은 CORE
완료 기준구현 상태, 원천, 검증, 다음 액션이 함께 있어야 완료

CORE MCP 업무 연결 · 2026.10.29

목적·범위Codex에서 CORE의 저장 원장 조회와 기존 업무 처리기를 직접 호출합니다. 기존 StudioMate 실시간 조회 전용 archivepilates-mcp는 별도로 유지합니다. 저장 자료의 조회시각을 StudioMate 실시간 확인시각으로 표시하지 않습니다.
수정 원칙현재 활성 소유자와 인증 세션을 매 호출 확인합니다. 수정은 정확한 입력·현재 원본·고정 업무 키를 묶은 10분 계획을 준비한 뒤 사용자 승인과 실행 확인을 거칩니다. 연결 권한은 개별 발송·공개·취소·삭제 승인이 아닙니다. 기존 원본 검증·중복방지·회원 발송시간 규칙을 유지합니다.
조회 경량화 · 2026.10.30지원 범위가 미확인일 때 업무 요약을 한 번 확인하고 필요한 업무·원장만 선택 조회합니다. 이미 확인한 CORE 저장 업무는 정확한 ID·필터로 직접 조회하며 전체 목록·브라우저·직접 DB 조회를 반복하지 않습니다. StudioMate 실시간 원본이 필요한 작업은 별도 조회 경로로 구분합니다. 수정 준비에는 업무별 주의사항을 함께 표시하며 권한·원본 최신성·중복 검증은 생략하지 않습니다. 회귀 테스트 250건과 별도 실제 읽기 연결을 검증했습니다. 운영 소스 반영 뒤 새 MCP 프로세스에서 적용되며, 기존 채팅 연결은 재연결 전까지 이전 코드를 사용할 수 있습니다. 이 Hosting 안내 게시와 현재 채팅 재연결 완료는 구분합니다.
차단·개인정보결과가 불명확한 요청은 자동 반복하지 않고 원본 업무 원장과 실행 접수 기록을 대조합니다. 임의 DB·쉘·비밀번호·시크릿·IAM 수정 도구는 제공하지 않습니다. 건강 답변·InBody 원문·전체 연락처는 일반 조회에서 제외합니다. 새 공개 서버·AI API·주기 실행은 추가하지 않습니다.
원천·반영 상태원천은 CORE의 기존 canonical 원장, staffs와 Firebase Auth이며 실행은 기존 승인 처리기와 권한 규칙을 사용합니다. 대상은 맥미니 archive-core-mcp 연결과 이 운영규칙입니다. 구현·가짜 데이터 검증 후 실제 조회·기존 초안 보존 저장·등록 연결을 독립 확인하며, 최종 결과와 제한은 2026-10-29-core-ops-mcp 보고서를 따릅니다. 이 문구가 포함된 Hosting 릴리스부터 안내가 반영됩니다.

OPS 프로젝트·데이터 명칭 · 2026.10.28

목적·현재 표시프로젝트·등록 웹앱의 표시 이름은 ARCHIVE PILATES OPS로 통일합니다. 같은 이름에 한글 접미사를 섞지 않습니다. ARCHIVE IN은 과거 명칭이며, 기존 경로·식별자·승인된 역사 기록을 제외한 새 표시 이름으로 사용하지 않습니다. 관리 화면은 기존 ARCHIVE CORE 주소를 유지합니다.
이름과 연결의 구분프로젝트 ID archive-pilates와 기본 DB (default)는 그대로입니다. 기본 DB는 ‘OPS 기본 데이터 원장’으로 설명합니다. 회원 기본정보 memberProfiles, 예약 bookings, 수업 lectures, 메모 memberMemos, 알림톡 후보 alimtalkCandidates와 발송 alimtalkSends의 기술 이름을 바꾸거나 복제하지 않습니다. 전체 119개 컬렉션의 읽기 쉬운 설명은 OPS 리소스 명칭표에 기록하며, 설명을 실제 사용 여부나 새 업무 원천으로 간주하지 않습니다.
사이트·보존 범위Hosting 7개에는 용도·상태 라벨만 추가했습니다. 기본 사이트는 공용 웹 경로, core는 관리 화면, in은 기존 회원 링크·설문, method는 강의실, privacy는 개인정보 처리방침입니다. home 사이트는 용도 추가 확인으로 보존하고, booking-test는 비활성 상태를 유지합니다. 기존 회원 링크·앱 ID·SDK 설정·로그인 권한·사이트 주소는 변경하지 않습니다.
삭제·검증만료된 영상 집계 제한 기록 중 시간별 ID·2일 만료 규칙·1시간 추가 여유·값과 버전이 모두 검증된 22건만 원자적으로 삭제했습니다. 현재 시간의 제한과 시청 이력은 유지했습니다. 종료한 예약앱의 미사용 격리 검증 Job 1개도 실행 중 작업과 예약 연결이 없음을 확인 후 삭제했습니다. 컬렉션 전체·회원 원장·발송 및 중복방지 기록·계약·감사 이력은 삭제하지 않았습니다. 결과와 확인 범위는 2026-10-28-project-data-housekeeping 보고서에 구분합니다.
재정리 원칙문서 수 0, 옛 이름, 완료 상태, 오래된 시각만으로 삭제하지 않습니다. 하위 컬렉션·외부 링크·선점·재처리 방지·복구 보관을 대조하고, 확실하지 않으면 보존합니다. 새 주기 작업이나 일괄 삭제는 추가하지 않았습니다. Google 관리 작업은 home@archivepilates.com의 Chrome 공식계정 프로필을 사용하며, 다른 프로필에서 Google 계정만 바꾸는 것으로 대체하지 않습니다.

예약앱 조회 미러 종료 · 2026.10.28

목적·현재 상태미사용 예약앱의 시험용 복사 DB와 서버를 정리했습니다. 운영자 승인 후 reservation-mirror DB의 고유 ID·생성 시각·삭제 시각(10/28 19:31 KST)을 대조했고, 전용 Cloud Run 서버 삭제와 테스트 Hosting 비활성화를 확인했습니다. 개발 소스와 과거 검증 기록은 참조용으로 보존합니다.
원천·운영 규칙StudioMate와 기존 canonical 운영 원장이 기준입니다. 운영용 (default) DB, 공통 로그인, 회원·수강권·예약·발송·메모 자동화는 유지합니다. 종료한 미러를 업무 원천으로 사용하거나, 별도 승인 없이 DB 재생성·재수집·서버 및 테스트 사이트 재배포를 하지 않습니다.
미사용·삭제 검증최근 7일의 사용량과 요청 기록을 대조했습니다. 마지막 로그인 후 데이터 조회는 10/24 11:59 KST이며, 최종 72시간 재확인에서도 성공 조회가 없었습니다. 확인한 Cloud Scheduler와 로컬 실행기에는 미러 연결이 없었습니다. 활성 DB 목록은 (default)만 남고 미러 DB·전용 서버 직접 조회와 테스트 주소 두 곳은 404입니다. Google 내부 정리 작업의 완료 플래그와 삭제된 DB의 원본 deleteTime 증거는 구분해 기록했습니다.
범위·다음 조치공식 홈페이지·CORE·ARCHIVE IN은 정상 응답합니다. DNS·공통 인증·회원 권한·운영 자동화 주기는 변경하지 않았습니다. 테스트 Hosting 사이트의 소유권과 DNS 연결은 유지한 채 서비스를 비활성화했습니다. 전용 계정·과거 배포 이미지·분석 소스는 삭제하지 않았으며 재활용은 새 승인 후 판단합니다. 결과는 2026-10-28-reservation-mirror-retirement 보고서를 기준으로 확인합니다.

LG 에어컨 제어 · 2026.10.21

목적·구현센터 에어컨을 CORE 에어컨 메뉴에서 조회·제어합니다. 활성 owner·manager와 현재 근무 중인 CORE 활성 강사를 허용합니다. 강사는 최초 비밀번호 변경과 최신 로그인, 본인 UID·강사·센터 정보 일치까지 서버에서 확인합니다. 퇴사·접근 중지·확인되지 않은 근무 원천·오래된 로그인은 차단합니다. LG 공식 API를 사용하며 회원·StudioMate 자동화와 분리합니다.
강사 권한 검증·배포2026.10.21 강사 에어컨 권한을 함수 3개·신호 읽기 규칙·CORE Hosting에 운영 반영했습니다. 서버·접근 회귀 317건, 실제 규칙 360건, 화면 78건과 강사 메뉴 이동 통합 검증을 통과했습니다. 배포 파일의 모의 강사 화면과 실제 운영자 8대 조회를 확인했습니다. 강사에게 다른 운영 메뉴나 회원 원장 접근은 부여하지 않습니다. 실제 강사 대리 로그인·비밀번호 변경·실제 기기 조작은 하지 않았습니다.
원천·권한상태는 요청 시 LG API에서 조회하고, 제어 직전에 기기 목록·프로파일·상태를 다시 확인합니다. 허용 목록의 에어컨만 다루며 지원하는 항목과 값만 받습니다. 제어용 PAT는 Secret Manager, 상태 알림용 PAT·인증서는 맥미니 비공개 경로에 분리하며 브라우저·Firestore·Git에 저장하지 않습니다. 모델별 설정 범위·섭씨·운전상태가 확인되지 않으면 제어를 차단합니다.
실행·중복방지기기별 잠금과 명령 ID로 중복 클릭·동시 실행을 막습니다. 요청 접수와 실제 상태 확인을 구분하며 응답 불명확 시 자동 재전송하지 않습니다. 상태 재조회로 확인하거나 운영자가 현재 상태를 명시적으로 확인한 뒤에만 잠금을 해제합니다. 처리 중인 요청은 2분 이내 잠금을 해제하지 않습니다. 아카이브 에어컨 전체 끄기는 대상 이름·개수를 확인한 뒤 기존 기기별 검증·명령을 순서대로 실행합니다. 이미 꺼진 기기도 서버에서 원본 상태를 확인하며 불필요한 제어는 보내지 않습니다. 연결 불가·잠금·지원 미확인 기기는 건너뛰고 기기별 결과를 표시합니다. 화면 종료·로그아웃 시 남은 실행은 중단하고 자동 재개·재전송하지 않습니다. 전체 켜기·시간 예약·새 정기 감지는 추가하지 않습니다.
원장·영향facilityClimateCommands는 제어 요청·상태·조회 증거 원장, facilityClimateGuards는 기기 잠금·조회 제한입니다. 직접 접근은 차단하며 서버 callable만 사용합니다. facilityClimateSignals는 기기 ID·변경 식별자·시각만 담는 재조회 신호이며 상태·제어 원천이 아닙니다. 허용된 운영자·강사만 최대 16개를 읽고 클라이언트 쓰기는 금지합니다. 회원 원장·알림톡·StudioMate 주기는 변경하지 않습니다.
상태 자동 반영맥미니의 단일 MQTT 수신기가 LG 변경 알림을 받아 신호를 저장하면 화면은 해당 기기의 LG 원본 상태를 다시 읽습니다. 화면을 보고 있을 때 정상 수신기 기준 60초, 연결 이상 시 15초 보조 조회하며 오류 시 최대 120초로 늦춥니다. 화면 숨김·이동·로그아웃 시 중지합니다. 수신기는 제어 요청을 보내지 않습니다. 새 별도 토큰으로 MQTT 등록 권한 부족을 해결했으며 기존 제어 토큰은 유지합니다.
응답 개선조회는 기기 최대 4대씩 처리합니다. 제어 전 원본 검증은 유지하고 제어 후에는 방금 확인한 목록·프로파일을 재사용하되 상태는 새로 읽어 LG 요청을 7회에서 5회로 줄입니다. 조작 중인 기기만 잠그고 다른 기기는 사용할 수 있으며 작성 중 상세 설정은 유지합니다. 전체 끄기는 기존 순차 처리·중복방지를 유지합니다. 자동 갱신은 제어를 재전송하지 않습니다.
화면강사 메뉴는 프라이빗·시퀀스 노트·에어컨 3개이며 홈과 다른 운영 메뉴는 숨깁니다. 영상 시청 기록·수집·조회 페이지는 보존합니다. 꺼진 기기는 회색, 운전 중인 기기는 흰색 카드로 구분합니다. 전원·실내/희망 온도·온도 조절을 우선 표시하고 운전모드·풍량·풍향·절전은 상세 설정에서 확인합니다. 강사도 동일한 8대 허용 목록·제어 전 검증·기기 잠금·순차 전체 끄기를 사용합니다. 조회 실패를 꺼짐으로, 요청 접수를 상태 반영으로 표시하지 않습니다.
검증·배포2026.10.21 에어컨 함수 3개·신호 규칙·CORE Hosting·맥미니 수신기 1개를 운영 반영했습니다. 서버 109건·화면 66건·수신기 27건·연결 준비 12건·실제 규칙 350건과 320·390·768·1440px 검증을 통과했습니다. 실제 LG 이벤트 수신·화면 온도 자동 갱신·8대 조회·권한 차단을 확인했습니다. 신호 저장부터 조회 응답까지 약 1.4초인 표본을 확인했으며 리모컨 조작부터의 지연 보장은 아닙니다. 조회 간격 충돌은 완료 시각 기준 대기로 보강하고 복구 시 이전 오류를 지웁니다. 실제 전원·온도·전체 끄기 및 리모컨 비교 조작은 사용자가 테스트하며 Codex는 실행하지 않습니다.

StudioMate 알림 감지 · 2026.10.20

목적·구현기존 맥미니 요청 처리기의 30초 실행 안에서 2분마다 웹 알림목록을 읽습니다. Chrome 푸시 직접 구독이나 웹훅이 아닙니다. 새 실행기·발송기·모델 호출은 추가하지 않습니다. 첫 목록은 과거분 무처리 기준선으로 저장하고, 새 예약·수강권·계약 알림은 기존 Excel 원본 갱신 요청으로만 연결합니다.
원천·중복방지알림 제목·본문의 내용 해시는 재조회 신호이며 회원·예약·발송의 정본 ID가 아닙니다. 반복 수신·재시작은 동일 요청 키로 막고 대기 중 갱신에 합치며, 추가 갱신은 최소 15분 간격입니다. 전체 Excel 실행 잠금과 기존 브라우저 잠금을 분리해 정기·요청 실행의 동시 수집·반영을 막습니다. 처리 중 수집 이후의 새 알림은 다음 갱신 대상으로 남깁니다.
유지·예외홀딩·계약 생성/완료 확인·서명요청 문자·연락처 후속 처리는 알림 요청에서 실행하지 않고 기존 정기 경로를 유지합니다. 알림을 계약·수강권·첫 수업의 확정 증거로 쓰지 않으며 기존 canonical 원천·발송 승인·선점·중복방지를 유지합니다. 최근 목록 범위 밖 변경·같은 내용 반복은 정기 Excel로 보완합니다. 로그인·조회 오류는 3회 연속 실패 시 메일로 알리고 복구와 구분합니다.
검증·배포실제 원본 알림 15건 읽기와 반복 수집 신규 0건을 확인했습니다. 격리 중복·재시작·동시 실행·홀딩 제외 시험을 수행하며, 실제 새 알림 수신→운영 요청 원장 반영 여부는 배포 보고서에 별도로 기록합니다. 구현·테스트 완료와 자연 발생 처리 완료를 구분합니다. 대상은 맥미니 요청 처리기와 이 CORE 운영규칙이며 Functions·기존 정기 주기는 변경하지 않습니다.

StudioMate 업무 MCP

archivepilates-mcp · 맥미니 운영자 조회 전용

목적·구현 · 2026-10-15맥미니 로컬 stdio 연결로 회원·수강권·예약·계약·알림톡·작업 원장을 조회합니다. 별도 챗봇·모델 호출·HTTP 공개·정기 실행은 추가하지 않습니다. 운영자는 조회할 회원과 업무를 지정하며, 강사 계정용 공개 서버가 아닙니다.
원천·안전 · 2026-10-16회원 검색·현재 수강권·만료 목록·회원 예약은 요청 시 StudioMate 원본을 읽습니다. 개별 화면은 이름·전체 전화번호·원본 ID를 대조하며 목록은 화면이 발생시킨 GET 응답의 최소 필드만 사용합니다. 임의 API 요청이나 원장 쓰기는 하지 않습니다. 계약·알림톡·작업은 기존 저장 원장으로 구분합니다. 실시간 조회 실패를 빈 목록이나 저장 자료로 자동 대체하지 않습니다. 예약·취소·수강권·홀딩 변경·실제 환불·발송은 지원하지 않습니다.
연결·권한맥미니 Codex 설정에서 운영 소스의 MCP를 필요할 때 실행합니다. 서버와 클라이언트 모두 회원 검색·수강권·조건별 목록·예약·계약·알림톡·작업 상태 조회 7개만 허용합니다. 활성 owner·manager 원장을 매 호출 확인하며, 강사 계정이나 외부 공개용으로 제공하지 않습니다. 메모 계획·실행 도구는 운영 연결에 노출하지 않습니다.
전용 운영 채팅 · 2026-10-15Codex 사이드바에 고정한 archivepilates-mcp 채팅에서 MCP 업무 조회를 요청합니다. 개발·배포·운영 정책 통합은 기존 ARCHIVE CORE 채팅에서 관리합니다. 채팅 생성은 실시간 조회 운영 전환이나 회원 변경·발송 승인과 다르며, 실제 지원 범위는 연결된 도구 결과로 확인합니다.
실시간 조회·예외기존 공유 브라우저 잠금은 최대 5초 대기하고 조회 후 브라우저를 닫습니다. 로그인 만료·다른 자동화 사용 중·화면 변경은 재인증 또는 재조회를 안내합니다. 수강권은 로딩 종료 후 새 상세 화면에서도 대조하며, 조회 중 변경되면 중단합니다. 종료 확인 실패 시 잠금을 유지하고 운영자 확인이 필요합니다. 로그인·회원 변경 POST는 차단하며 기존 동기화·발송 주기·중복방지는 유지합니다.
검증·배포 · 2026-10-16운영 연결 전환은 10월 16일 승인됐으며 이 문구가 포함된 Hosting과 맥미니 실행기 반영 후 적용합니다. 회원·수강권 실시간 원본 조회, 회귀 142건·공유 잠금 7건을 검증했습니다. 실제 배포·등록 연결 재시험은 2026-10-15-archivepilates-mcp-live-lookup 보고서를 따릅니다. 새 MCP 프로세스에서 실행하며 기존 대화에 옛 도구 설명이 남으면 연결을 새로고침합니다. 메모·예약·발송 쓰기는 별도 승인·제한 테스트 대상입니다.
조회 개선 · 2026-10-16검색은 이름·전체 전화번호·원본 ID로 검증하며 등급 미표시만으로 회원을 차단하지 않습니다. 검색에서 수강권 해석과 중복 검색·불필요한 통신 대기를 제거했습니다. 수강권은 화면이 요청한 목록의 완료 상태와 안정된 화면을 확인하고 두 번 대조합니다. 공유 잠금과 쓰기 차단을 유지하며 배포 결과는 2026-10-16-archivepilates-mcp-operations-v2 보고서를 따릅니다.
조건별 실시간 목록 · 2026-10-16members_list_expiring은 기본적으로 전체 원본 회원 페이지의 현재 수강권을 직접 확인합니다. 최대 2,000회원·반환 200회원이며 페이지 총수·중복·원본 ID와 첫 페이지 재조회를 대조합니다. 한국 날짜 기준 오늘 만료 0일을 포함하고 만료·잔여 0회·정지권을 제외합니다. 여러 페이지의 조회 구간이므로 단일 시점 원장은 아니며 동시 변경 검출을 보장하지 않습니다. sourceWindow·checkedAt과 누락·미분류를 함께 표시합니다. source=snapshot을 명시한 경우만 기존 5분 메모리 캐시의 저장 목록을 쓰며 최신성은 unknown입니다. 어떤 모드도 발송·예약·환불의 대상 원천으로 사용하지 않습니다.
예약·최신성 · 2026-10-16bookings_list는 기본적으로 선택한 원본 회원의 이용내역 전체 탭에서 예약·출석·취소를 함께 조회합니다. 최대 31일 범위, 원본 2,000행 수집·200행 반환 한도이며 오래된 날짜 경계까지 페이지를 확인합니다. 예약예정 0건을 전체 이력 0건으로 표시하지 않습니다. 전체 원본 수·중복·순서·회원 연결이 맞지 않으면 중단합니다. source=snapshot을 명시할 때만 저장 예약 원장을 표시하며 자료 조회시각·캐시 갱신시각을 원본 확인시각으로 대신하지 않습니다. 기존 Excel 1시간 수집과 자동 발송·연락처·예약 처리 주기는 유지합니다.
이번 반영·검증사용자 승인 범위는 조회 전용 7개 도구와 CORE 운영규칙입니다. 원본 1,036회원·21페이지 조회 약 28초, 선택 회원의 취소 이력 2건을 직접 확인했습니다. 맥미니 실행기·Hosting 반영 및 등록 연결 시험 결과는 2026-10-16-mcp-freshness-policy 보고서와 작업 기록을 따릅니다. 이전 연결은 새로고침해야 새 동작을 사용합니다. 회원 데이터·예약·발송·기존 자동화 주기는 변경하지 않습니다.
다음 단계 · 아직 미구현전체 회원 Excel 원천과 목록 범위 대조, 고정예약 계획·승인·큐·전체 월 대조, 월간 그룹수업 복제 실행기는 후속 개발 대상입니다. 기존 고정예약 실행 스크립트나 생성 계획이 있다는 이유만으로 MCP 지원 완료라 하지 않습니다. 공휴일·토일 전날 21시 취소는 일반 그룹수업에만 적용하며 프라이빗·강사레슨은 복제 대상에서 제외합니다. 실제 월간 변경은 별도 계획 승인 후에만 실행합니다.
초기 연결·메뉴 대기 개선 · 2026-10-22목적은 필요한 조회만 실행하고 메뉴 대기를 줄이는 것입니다. 매 이동의 서버 권한 확인 후 화면을 먼저 열고 조회 중·실패는 해당 화면에 표시합니다. 초기 공개 SDK는 병렬 준비하며 인증·회원 자료는 미리 저장하지 않습니다. 홈 원본 확인·회원 품질 경고는 유지하고 다른 화면의 불필요한 운영 조회 4종을 생략합니다. 원천은 staffs·Firebase Auth와 각 메뉴의 기존 canonical 자료입니다. 시퀀스 저장 확인과 권한 변경·최초 비밀번호 변경 차단은 유지합니다. Safari 권한 변경 시 상위 페이지에서 재연결하고 확인된 강사의 빈 로딩 공간도 제거합니다. 대상은 CORE 화면·Hosting뿐이며 계정·Functions·Firestore 규칙·발송·주기는 그대로입니다. 구현·격리 검증 완료: 접근 224건, 일반 73건, 시퀀스 36건, 반응형 95건, Chromium·WebKit 메뉴 검사 통과. 2026-10-22 운영 배포 승인, 이 기록이 포함된 Hosting 릴리스부터 적용합니다. 실제 iPhone과 체감 속도는 별도 확인 대상입니다. 배포·라이브 검증 결과는 2026-10-22-core-loading-performance 보고서와 release.json을 따릅니다. 다음: 열린 화면을 한 번 새로고침합니다. 최종 갱신 2026-10-22.
화면 전환 · 2026-10-12첫 접속·새로고침에서는 서버 권한 확인을 유지합니다. 로그인 후 메뉴 이동은 같은 출처의 내용 화면을 준비하며 기존 메뉴·사용자 표시를 유지합니다. Firebase 연결은 재사용하지만 각 새 화면의 getCoreAccessSession과 본문 조회 권한 검증은 생략하지 않습니다. 로그인 사용자·역할·담당자·최초 변경 조건이 달라지면 이전 화면을 폐기하고 다시 확인합니다. 시퀀스는 서버 저장 확인 후 이동하며 충돌·저장 실패 시 이동하지 않습니다. 장시간 응답 지연 시 기존 화면을 보존하고 메뉴 재선택을 안내합니다. 원천 staffs·Firebase Auth와 sequenceNotes·sequenceNoteImages, 담당 프라이빗 정책은 유지합니다. 영향은 CORE 화면·Hosting이며 Functions·Firestore 규칙·계정·회원 데이터는 변경하지 않습니다. 이 기록이 포함된 Hosting부터 적용되며 배포와 검증 증거는 2026-10-12-core-navigation-continuity 보고서 및 release.json을 따릅니다. 실제 iPhone Safari는 별도 확인 대상입니다. 다음: 변경 반영 후 한 번 새로고침합니다.
모바일 메뉴 이동 · 2026-10-12시퀀스 저장 확인은 실제 시퀀스 편집기와 CORE 내용 프레임에만 적용합니다. 로그인 보조 프레임은 저장 대상으로 검사하지 않습니다. 저장 실패·충돌·편집기 준비 미완료 시에는 현재 내용을 유지하고 이동을 차단합니다. 원천 sequenceNotes·sequenceNoteImages와 로그인 권한은 그대로입니다. 강사·운영자 화면을 Chromium·WebKit, 320·390·768·1440px에서 격리 검증했습니다. CORE Hosting 반영 대상이며 배포·라이브 정적 화면 검증은 2026-10-12-core-mobile-sequence-navigation 보고서와 release.json을 따릅니다. 실제 iPhone 확인은 별도입니다. 다음: 저장 상태 확인 후 새로고침합니다.
로그인 사용자 · 2026-10-11관리자·강사 화면 오른쪽 상단에 현재 사용자 이름과 로그아웃을 표시합니다. 이름은 getCoreAccessSession의 canonical staffs 이름을 사용하며 전화번호·이메일로 대체하거나 별도 저장하지 않습니다. 로그아웃·계정 변경 시 이전 사용자 표시와 업무 화면을 숨기고, 로그아웃 완료 후 로그인 화면으로 돌아갑니다. 실패 시 다시 시도할 수 있습니다. 비밀번호·역할·저장된 시퀀스는 변경하지 않습니다. 격리 화면 124건과 반응형 95건 검증 완료. CORE Hosting 반영 대상이며 Functions·Firestore 규칙 변경은 없습니다. 다음: 화면 새로고침 후 이름 옆 로그아웃 버튼을 사용합니다.
전체 재로그인 · 2026-10-11운영자 요청 시 canonical staffs.coreAuthAfter를 갱신하고 해당 계정의 Firebase 갱신 토큰을 철회합니다. 이전 인증시각의 관리자·강사 세션은 Functions와 Firestore에서 차단하며 다시 로그인해야 합니다. 비밀번호·역할·근무상태·시퀀스는 변경하지 않습니다. 열린 이전 화면은 새로고침하면 로그인 화면으로 전환됩니다. 실제 권한 원천은 staffs와 Firebase Auth이며 프라이빗 별도 bearer 링크는 폐기하지 않습니다. 승인 대상 6계정만 일회 처리하며 정기 로그아웃이나 새 알림톡 발송은 추가하지 않습니다. 2026-10-11 09:50:17 KST 기준 운영자 2명·강사 4명 세션 해제와 원천 재조회 검증 완료. 격리 관리자·강사 계정으로 이전 세션 차단과 같은 비밀번호의 새 로그인 허용을 확인했습니다. 공식 로고 파비콘, Hosting·Functions·Firestore 권한 규칙은 e1522f99에서 운영 반영했습니다. 다음: 각 사용자가 새로고침 후 다시 로그인합니다.

강사 CORE 접근 · 2026-10-11

강사 4명 연결 · 라이브 검증 완료
프라이빗 기록·리포트 분리 · 운영 반영강사는 본인 담당 기록과 리포트만 월별로 조회하고 전체·기록·리포트를 구분합니다. 운영자 owner·manager는 기존 통합 조회를 유지합니다. 원천은 staffs, bookings, privateLessonChartRequests, privateLessonChartRecords이며 요청·예약·기록의 담당자·센터·회원·날짜·문서 ID를 서버에서 대조합니다. 불일치 기록은 열람 링크를 제공하지 않으며 이전 리포트도 같은 담당자·센터의 요청에 연결된 기록만 표시합니다. 링크 조회 중에는 예약 변경을 자동 보정하지 않고 운영자 확인으로 중단합니다. 기존 회원 리포트 토큰 열람과 알림톡 발송 규칙은 유지합니다. 2026-10-11 CORE Hosting과 조회·차트·리포트 함수 3개 반영 완료. 권한 테스트 221건, 합성 화면 124건, 라이브 반응형 95건 및 운영 원천 30건 연결 일치 확인. 비로그인 조회와 잘못된 토큰 차단, 기존 차트의 읽기 전용 열람을 확인했습니다. 실강사 4명은 아직 최초 비밀번호 변경 전이므로 실제 로그인 후 담당 목록 확인은 미검증입니다. 다음: 강사가 최초 변경 후 다시 로그인하여 프라이빗 월별 목록을 확인합니다. 최종 갱신: 2026-10-11.
목적·현재 상태현재 근무 강사에게 담당 프라이빗 기록·리포트와 본인 시퀀스만 제공합니다. 배민진·정은영·이초림·정유리 계정을 연결하고 초기 로그인과 변경 전 업무 차단을 확인했습니다. 사용자 선택은 초기 비밀번호 111111과 별도 활성화 코드 없음입니다. 실제 강사는 첫 로그인에서 본인이 새 비밀번호를 정해야 합니다.
첫 로그인초기 로그인은 비밀번호 변경만 허용합니다. 새 비밀번호는 8~64자이며 초기값을 다시 사용할 수 없습니다. 변경 후 기존 세션을 차단하고 새 비밀번호로 다시 로그인해야 업무를 시작합니다. 변경 전과 새 로그인 전에는 수업·회원·프라이빗 링크·시퀀스 조회와 저장 등 모든 업무를 막으며, 화면뿐 아니라 Functions와 Firestore 규칙에서도 확인합니다. 공통 초기값은 전화번호 소유를 증명하지 않으며 먼저 접속한 타인의 변경 위험이 남습니다. 별도 활성화 코드는 임의로 추가하지 않습니다.
메뉴·권한 · 2026-10-21강사 메뉴는 프라이빗·시퀀스 노트·에어컨 3개입니다. 에어컨 추가는 다른 운영 메뉴 권한 부여가 아닙니다. 홈은 숨기며 홈 주소는 프라이빗으로 이동합니다. 오늘의 수업은 제거한 상태를 유지합니다. 담당 프라이빗은 본인 canonical staffId·studioId·예약 원천으로만 표시하고 다른 강사·취소·중복 fallback·이름 일치·member360 미러로 접근 권한을 부여하지 않습니다. 시퀀스는 본인 Firebase UID 소유 기록만 읽고 쓰며 운영자 기록을 재배정하지 않습니다. 기존 계정·비밀번호와 운영자 권한은 유지합니다.
메뉴 순간 노출 수정 · 2026-10-11 운영 기준첫 화면부터 운영자 메뉴를 숨기고 getCoreAccessSession이 운영자로 확인한 경우에만 표시합니다. 강사 로그인·화면 이동·로그아웃 시 전체 메뉴를 노출하지 않으며 뒤로 가기 캐시 복귀는 재연결하여 권한을 다시 확인합니다. 초기 스크립트 연결 실패 시 다시 연결 표시를 제공하고 권한 확인 실패 시 접근 확인 안내를 표시합니다. 실패를 이유로 운영자 메뉴를 우회해 열지 않습니다. 원천 staffs와 담당 프라이빗·UID별 시퀀스 정책은 변경하지 않습니다. 대상은 CORE 공통 스타일·강사 화면·연결 표시입니다. 격리 화면 146건, 정적 운영자 반응형 95건과 권한·담당 조회 224건 검증 완료. 캐시 복귀는 격리 수명주기 시험이며 실제 브라우저 캐시 적중 증거와 구분합니다. Hosting만 승인된 반영 대상이며 Functions·회원 원천·발송·예약 변경은 없습니다. 배포 식별자는 /release.json과 web.app/core/release.json에서 대조합니다. 다음: 강사는 새로고침 후 프라이빗·시퀀스 노트를 사용하며 홈 콘텐츠는 별도 확정까지 표시하지 않습니다. 최종 갱신: 2026-10-11.
원천·근무 게이트StudioMate 직원 탭의 필터 없는 전체 명단과 canonical staffs 기록이 근무 원천입니다. 기존 일일 전체 스캔의 employmentStatus=current 및 employmentSource=studiomate_staff_tab_browser_scan과 명시적 CORE 접근 허용을 함께 확인합니다. 비근무·미확인 상태는 강사 업무를 허용하지 않습니다. 실패·부분 스캔은 마지막 확인 상태를 보존하며 CORE 새로고침은 스캔을 시작하지 않습니다. 일일 반영 전 근무 변화를 즉시 감지하는 방식은 아니므로 긴급 접근 차단은 운영자가 별도 확인합니다.
계정 준비·보존최초 계정 준비 대상은 승인된 현재 강사 4명으로 한정합니다. 향후 신규 강사 계정은 운영자가 별도 확인해 수동 준비하며 명단 감지나 재입사만으로 자동 발급하지 않습니다. 근무 스캔은 기존 active, role, uid와 비밀번호를 변경하지 않습니다. 접근 게이트는 근무 메타데이터를 확인할 뿐 연락처 우선순위·알림톡 대상 정책을 바꾸지 않습니다.
프라이빗 링크 경계CORE의 링크 조회는 본인 canonical 예약에 연결된 요청으로 제한합니다. 이미 발급된 프라이빗 bearer 링크는 기존 별도 토큰 인증을 사용하므로 CORE 로그아웃만으로 철회되지 않습니다. CORE 접근 차단을 기존 링크 폐기나 모든 프라이빗 접근 철회로 보고하지 않으며, 이번 변경은 기존 링크 인증·알림톡 정책을 변경하지 않습니다.
영향 함수·규칙getCoreAccessSession, completeCoreFirstLogin, getCoreInstructorWorkspace와 requireStaff/CORE 강사 접근 가드, CORE 강사 화면, Firestore readyCoreInstructor·sequenceUser 및 sequenceNotes/sequenceNoteImages 소유권 규칙이 대상입니다. 계정 준비는 provision-core-instructor-accounts 스크립트, 근무 원천은 기존 sync-studiomate-staffs-from-browser입니다. Functions 영향 코드베이스, Firestore 규칙·필요 인덱스, CORE Hosting은 배포 전 각각 확인합니다.
검증·배포·다음기능·권한 규칙·조회 인덱스 반영(f0886adc), 최초 변경 함수의 전용 최소 권한 실행 계정 반영(e237e8ea) 완료. 회귀 218건·통합 화면 92조합과 전체 격리 라이브 테스트를 통과했습니다. 이전 규칙 검증 235건은 변경 없이 유지합니다. 최초 변경·새 로그인·과거 세션 차단·민감 원문 차단·UID별 본문/사진·삭제본 복구 방지·비근무 차단을 확인했습니다. 실강사 3명은 UID 유지, 1명은 신규 생성했으며 관리자 인증·문서는 보존했습니다. 실제 강사의 비밀번호 변경과 문자 발송은 시험하지 않았습니다. 다음: 강사별 최초 변경 안내. 운영자 전체 시퀀스 조회는 아래 2026-10-13 통합 조회 규칙을 따릅니다. 최종 갱신: 2026-10-11.

홈 업무 목록 · 2026.10.17

화면 정리
목적·원천홈은 기존 재등록 상담·회원 원본·자동화 상태와 알림톡 후보·발송·요청 원장을 조회한 업무별 바로가기를 표시합니다. 상세 항목과 연결되지 않는 우선순위 합계·설명 및 상단 ‘오늘 할 일’ 문구는 제거했습니다. 조회 상태·시각·새로고침은 작은 도구줄로 유지합니다. 조회 실패·한도 도달은 정상 0건으로 표시하지 않으며 발송 승인이나 실시간 StudioMate 원본 확인을 대신하지 않습니다.
수정·검증메뉴 전환 후 공유 Firebase 연결이 다른 화면의 상태 배열을 거부하여 통신 업무 5개 조회가 누락되는 오류를 재현했습니다. 연결을 소유한 화면에서 배열을 복사하고 오류를 원천별로 표시하도록 수정했습니다. 실제 SDK 무통신 재현과 회귀 55건, 모바일·데스크톱 메뉴 이동 8조합을 통과했습니다. 이 문구가 표시되는 Hosting 릴리스에 포함하며 배포 식별자는 release.json으로 확인합니다. 회원 데이터·발송·중복방지·승인·자동화 주기는 변경하지 않습니다. 이전 연결을 교체하려면 전체 새로고침이 필요하며 최종 운영 검증 결과는 2026-10-17-core-home-priority-query 보고서를 따릅니다.
표시 변경검색·빠른 실행·외부 도구, 실제 처리할 업무, 재등록·주차·안내 발송 순서로 정리합니다. 합계 계산만 제거하며 개별 건수·회원 목록·실패 안내는 유지합니다. 강사의 홈 숨김과 기존 로그인 권한은 변경하지 않습니다. 화면 검증과 Hosting 반영 결과는 2026-10-17-core-home-summary-removal 보고서를 따릅니다.

공휴일·주말 일반 그룹수업 취소 · 2026.10.08

10.09 수업부터
운영 기준2026년 10월 9일 수업부터 공휴일·토·일 일반 그룹수업만 수업일 하루 전 21:00까지 취소 가능합니다. 프라이빗·강사레슨은 이 규정의 적용 대상에서 제외하며 별도 규정을 유지합니다. 일반 그룹수업의 토요일 마감은 금요일 21:00, 일요일 마감은 토요일 21:00입니다. 일반 평일 그룹수업의 6시간 전 기준은 유지합니다.
원천·설정StudioMate 수업 목록의 취소 가능 시간이 실제 적용 원천입니다. 공휴일·토·일 일반 그룹수업의 시작이 오전 9시이면 12시간 전, 오전 10시이면 13시간 전으로 설정합니다. 예약 가능 시간·당일 예약 변경 시간·폐강 시간은 변경하지 않습니다. 수업 생성·복사 후 일반 그룹수업 여부와 프라이빗·강사레슨 제외를 먼저 확인한 뒤 공휴일·토·일 일반 그룹수업의 날짜별 마감을 다시 확인합니다. 새 자동 조회 작업은 추가하지 않습니다.
반영·검증10.09 그룹수업 6건과 10.11·18·25 일요일 그룹수업 9건을 수정했습니다. 토요일 12건은 기존 설정이 맞아 유지했습니다. 10.09~12.31 조회에서 현재 생성된 일반 그룹수업 27건의 전날 21:00 마감을 확인했습니다. 강사레슨 10건과 프라이빗은 제외했습니다. 아직 생성되지 않은 향후 수업은 검증 대상이 아닙니다.
10.08 안내·계약 기록Notion 예약시스템 표와 StudioMate 사용방법의 금요일 마감 문구를 수정했습니다. 이용안내·10월 공지의 새 규정도 확인했습니다. StudioMate 시설 이용 약관에 예외를 추가했고 기존 작성·발송·서명 계약서는 보존합니다. ARCHIVE IN 가입서 안내와 이 운영규칙은 동일 Hosting 릴리스로 반영합니다. 다음: 프라이빗 별도 규정 적용 범위 확인, 새 수업 생성 시 마감 확인. 최종 갱신: 2026.10.08.
10.11 범위 확정2026.10.11 사용자 확인: 전날 21:00 규정은 공휴일·토·일 일반 그룹수업에만 적용하며 프라이빗·강사레슨은 제외합니다. 10.08 기록의 적용 범위 확인 대기는 이 확인으로 해소했습니다. 다만 10.09 11:30 프라이빗 수업의 StudioMate 24시간 전 마감과 시설 이용 문구의 전일 21시 불일치는 여전히 미확정이며 별도 확인 전에는 변경하지 않습니다. CORE 운영규칙과 기존 계약 열람 안내를 배포하고 라이브 문구를 확인했습니다. 외부 약관·공지·StudioMate 설정은 이번 작업에서 수정하거나 재검증하지 않았습니다. 증거는 2026-10-11-core-health-mail-audit 보고서에 기록합니다. 다음: 외부 안내의 제외 문구 확인과 별도 프라이빗 마감 불일치 검토. 최종 갱신: 2026.10.11.

홀딩 잔여기간 안내 · 2026.10.19

10.08 신규 등록부터 자동 안내
목적·계산홀딩 등록 후 총 가능일, 누적 사용일, 잔여일을 안내합니다. 총 가능일은 최초 계약기간의 20%를 소수점 버림으로 계산합니다. 홀딩으로 연장된 만료일은 기준으로 쓰지 않습니다.
사용일발송 직전에 수강권의 최신 정지기간 목록과 저장된 현재 날짜칸을 열어 다시 계산합니다. 예정 정지는 현재 날짜칸이 비어 있어도 취소되지 않은 생성 이력과 저장된 예정 목록이 정확히 일치하고 대상이 하나일 때만 확인합니다. 이전 정지는 원본에 남은 실제 적용기간, 이번·예정 정지는 등록기간을 양 끝날 포함으로 합산합니다. 시작 전 취소는 0일이며, 시작 당일·이후 취소로 실제 사용기간이 확인되지 않으면 보류합니다. 센터 휴무 연장은 제외하며 초과는 운영자가 확인합니다.
원천·중복StudioMate의 실제 회원·발급 수강권·홀딩 식별자, 검증된 최초 계약기간, 전체 정지 이력을 사용해야 합니다. Excel의 정지 상태와 현재 만료일만으로 발송하지 않습니다. 최초 기준선의 과거 홀딩은 발송하지 않고, 동일 홀딩 건의 날짜 수정·템플릿 교체로 재발송하지 않습니다.
원본 회원 연결기존 Excel 회원 문서는 보존하며 새 회원 문서를 복제하지 않습니다. 원본 ID 연결과 완료된 ID 조회 기록의 이름·연락처·센터·확인시각이 일치하고 중복 연결이 없어야 합니다. 기존 숫자 ID의 회원 문서를 우선하며, 연결이 변경·철회되거나 모호하면 보류합니다. 발송 선점 직전에도 같은 원장을 다시 확인합니다. 원본 ID 연결은 홀딩 등록·후보 생성·즉시발송을 뜻하지 않습니다.
적용 시점한국시간 2026.10.08 00:00 이후 새로 등록한 홀딩부터 자동 안내합니다. 시작일이나 발견시각이 아니라 StudioMate 변경이력의 실제 정지 등록시각이 기준입니다. 최초 기준선과 그 이전 등록 건은 보내지 않습니다. 신규 등록 후 48시간이 지난 미처리 건은 자동 소급하지 않고 운영자가 확인합니다.
완료 건 재점검원본에서 확인한 동일 회원·발급권·정지 생성키의 후보·발송·선점 원장이 전달 완료로 일치하면 48시간 초과 경고 없이 종료합니다. 접수된 건은 기존 메시지 조회만 하며 재발송하지 않습니다. 원장 일부만 있거나 식별정보가 다르면 보류합니다. 신규 미발송 건의 48시간 제한은 유지하며 전달 재확인으로 최초 발송시각을 덮지 않습니다.
발송 원장 대조SOLAPI의 실제 생성일에 속한 메시지 ID와 Firestore 성공 원장을 직접 대조합니다. 재확인으로 원장 수정일이 바뀌어도 발송 누락으로 판단하지 않습니다. 메시지 ID가 없거나 양식이 맞지 않는 실제 불일치는 계속 확인필요로 알립니다.
홀딩 회원 메모 · 정상 발송 접수 기준새 안내는 수신자·본문·변수·메시지 ID가 일치하는 정상 접수 증거를 확보하면 전달 완료를 기다리지 않고 메모 대기열에 연결합니다. 메모에는 발송 접수로 표시하며 전달 완료와 구분합니다. 기존 5분 주기 처리기가 memberMemos와 같은 ID의 StudioMate 작업을 처리하고 전체 내용 재조회 후 완료로 기록합니다. 같은 홀딩 발송 키로 한 번만 생성하며 과거 발송분은 일괄 추가하지 않습니다. 접수 불명확·거절·원장 불일치는 보류합니다. 메모 실패는 메모만 재처리하고 알림톡을 재발송하지 않습니다. 다음 홀딩 계산은 원본 전체 이력을 다시 확인합니다. 원천은 기존 후보·발송·선점·회원 메모 원장이며 새 DB·발송기·주기는 추가하지 않습니다. 새 발송은 holding_acceptance_memo_v2, 기존 holding_delivery_memo_v1은 전달 기준을 보존합니다. 맥미니 실행기·조회 Functions·CORE Hosting에 반영하는 정책이며 합성 테스트·원장 대조를 수행합니다. 신규 정책의 실제 자연 발송은 별도 확인이 필요합니다. 최종 갱신: 2026-10-19.
메모 기록번호신규 메모는 전체 내부 ID 대신 짧은 H- 기록번호를 표시합니다. 내부 메모·작업 ID와 원장 연결은 유지하며 기록번호만으로 반영 완료를 판정하지 않습니다. 저장된 전체 내용과 원천·내용 해시를 함께 대조합니다. 기존 긴 기록번호의 대기·재시도·완료 메모는 수정하거나 다시 만들지 않습니다. 기록번호는 다음 홀딩의 계산 원천이 아닙니다. 최종 갱신: 2026-10-19.
공통 처리 진행상태운영자는 자동화 화면과 MCP에서 정확한 홀딩 업무 ID로 감지·원본 확인·발송 접수·전달 결과·메모 접수·StudioMate 반영을 구분해 조회합니다. 알림톡 목록의 진행 상태 링크로 같은 기록을 엽니다. 조회는 기존 6개 문서의 저장 증거이며 표시 시각을 실제 공급자 처리시각으로 단정하지 않습니다. 실시간 원본 조회나 발송 허가도 아닙니다. 기존 공통 대상 검증과 업무별 최종 원본 검증·승인·중복방지는 유지합니다. 첫 적용은 홀딩 메모이며 계약·예약·환불 실행은 아직 연결하지 않습니다. 영향을 받는 조회는 getMemberOperationProgress와 MCP operations_get_progress입니다. 운영 반영 결과·후속 검증은 배포 리포트에 기록합니다.
양식·검증수강권 홀딩 현황 안내 v2의 검수 승인, 로고 이미지형, 본문 변수 8개와 홀딩규정 보기 버튼을 발송 전에 확인합니다. 김기효의 승인된 임시 0원 수강권에서 정지 설정부터 전달 완료와 후보·발송·선점 원장 일치까지 확인했고 임시 수강권은 삭제했습니다. 이 검증은 단건 테스트이며, 내일부터의 첫 정기 자동발송 증거와 구분합니다. 삭제된 v1은 복구하거나 대체 양식으로 사용하지 않습니다.
발송 안전최초 발급·정지 생성 이력과 저장된 현재 또는 예정 정지가 일치하고 현재 스텝 제외·SOLAPI 과거 이력·후보·원장 검증이 끝난 경우에만 발송합니다. 회원·발급 이력·정지 생성 이력의 고정 키로 선점하며 날짜 수정·템플릿 교체·재실행으로 재발송하지 않습니다. 접수 결과가 불명확하면 선점과 메시지 ID를 보존하고 조회만 수행합니다. 실제 사용기간이 사라진 중도 해제 등 불명확한 건만 보류하고 확인필요 메일을 보냅니다. 테스트 예외를 일반 자동발송에 적용하지 않습니다.
원천 승격발송 직전 읽은 원본과 회원 원장을 검증해 holdingNoticeEvents에 최소 식별정보만 확정합니다. 이 확정 기록과 최신 재조회가 모두 통과해야 후보·발송 원장에 연결합니다. workLanes의 명단·조회 요청과 member360은 발송 원천이 아닙니다. 정지 전체 이력이나 잔여일 장부를 반복 저장하지 않습니다. 동일 상품이 여러 개이거나 최초 발급·생성 이력이 불명확하면 추측하지 않습니다.
현재 정지 수집StudioMate의 진행 중인 정지는 목록뿐 아니라 정지 시작일·종료일 입력칸에도 표시됩니다. 저장된 현재 정지 날짜칸과 목록을 함께 수집하고 동일 기간은 한 번만 셉니다. 두 번의 화면 조회가 일치해야 하며 입력 중인 날짜·불완전한 날짜·중복 항목은 확인필요로 중단합니다. 취소 이력을 등록 상태로 사용하거나 여러 생성 이력을 한 정지로 합치지 않습니다. 이지영2 사례에서 목록 0건이 현재 정지 0건을 뜻하지 않음을 확인했습니다.
기간 변경 이력 · 2026-10-26StudioMate가 기간 수정도 수강권정지로 표시할 수 있어 종류 이름만으로 신규 등록을 판단하지 않습니다. 시작·종료일 모두 내역없음에서 생성된 경우만 신규이며, 기존 날짜의 전후 값이 이전 기간 하나와 정확히 연결되면 같은 홀딩의 수정으로 재계산합니다. 최초 생성키·등록시각·48시간 제한과 기발송 원장은 유지합니다. 같은 시각의 연속 수정, 이전 날짜 불일치·누락·중복·잘못된 만료일은 보류합니다. 원천은 전체 변경이력·저장된 날짜칸과 정지 목록이며 잔여일 장부를 별도로 만들지 않습니다. 기존 등록 알림은 재발송하지 않습니다. 원본 해석 검증은 2026-10-26-holding-period-edit 보고서를 따릅니다.
종료 홀딩·반복 확인 메일 · 2026-10-26수강권 수정일은 원본 재조회 신호일 뿐 신규 홀딩 확정이 아닙니다. 수정 감지 후 전체 이력과 정지 목록이 일치하고 현재·미래 홀딩이 없으면 과거분 발송 없이 정상 제외합니다. 현재 날짜칸이 없지만 진행 중인 기간이 있거나 이력이 불완전하면 확인필요를 유지합니다. 허용일수 초과 차단은 유지합니다. 동일 작업·원본 지문·사유의 내부 확인 메일은 지속 선점 원장으로 1회만 시도하고, 메일 결과 불명확도 자동 재전송하지 않습니다. 원본이나 사유가 바뀌면 별도로 확인하며 회원 발송·메모 원장에는 영향을 주지 않습니다. 목적·검증·배포 상태는 2026-10-26-holding-review-mail 보고서를 따릅니다.
기간 변경별 안내 · 2026-10-26사용자 승인에 따라 기존 승인된 홀딩 현황 안내 v2의 문구·이미지·버튼·8개 변수를 그대로 사용하고 변경 후 기간과 잔여일을 안내합니다. 문구의 등록되었습니다는 템플릿 고정 문구이며 변경 전후 비교용 새 템플릿으로 표시하지 않습니다. 최초 등록 안내가 전달 완료된 홀딩의 이후 수정만 별도 변경키로 1회 처리합니다. 변경키는 최초 홀딩과 검증된 이전 변경·변경시각·전후 날짜를 연결하며 템플릿 교체·재조회로 새 키를 만들지 않습니다. 활성화 이후 변경만 대상이고 승인된 이번 1건 외 과거 변경을 일괄 발송하지 않습니다. 변경부터 48시간 초과·순서 불명확·앞선 미처리 변경·취소·직원 제외·접수 불명확은 보류합니다. 접수·실패·불명확 요청은 재발송하지 않고 원본·전체 제공자 이력·선점을 다시 대조합니다. 메모는 별도 변경 기록을 추가하며 기존 기록은 보존합니다. 기존 hourly Excel 감지·공유 브라우저 잠금·5분 메모 작업과 09:00~23:00 발송시간을 유지합니다. 대상은 맥미니 처리기·기존 settings/holdingNotice의 별도 정책·이 CORE 규칙이며 Functions·수강권·예약은 변경하지 않습니다. 구현·배포·실제 접수·전달·메모 반영은 2026-10-26-holding-period-change-notice 보고서에서 구분합니다.
조회 실행 호환 · 2026-10-24홀딩 이력·정지기간을 읽는 브라우저 함수는 맥미니 실행기의 코드 변환 후에도 외부 보조 함수 없이 동작하도록 검증합니다. 조회 코드 오류는 신규 발송 실패나 기존 전달 취소가 아닙니다. 원본 수강권 전체 이력과 저장된 기간을 다시 확인하기 전에는 후보를 확정하지 않습니다. 기존 완료 원장·중복방지·48시간 제한·시간별 수집과 5분 메모 주기는 유지하며 오류 복구를 위해 수동 재발송하거나 작업 상태를 초기화하지 않습니다. 대상은 맥미니 조회 모듈과 CORE 운영규칙이며 구현·검증·배포 상태와 원본 무발송 조회 결과는 2026-10-24-holding-dom-serialization 보고서에 구분합니다.
발송 직전 조회calculationMode=live_studiomate_readback을 사용합니다. 홀딩 한 회차는 전용 브라우저 세션과 기존 공유 잠금을 재사용하고 각 조회는 새 페이지에서 최신 수강권을 읽습니다. 발송 선점 직전 원본 재조회는 생략하지 않으며 파일이나 이전 계산값으로 대체하지 않습니다. 배치 종료·오류·중단 시 브라우저를 닫은 뒤 잠금을 해제합니다. 종료 확인이 불가능하면 잠금을 보존해 다른 작업의 동시 사용을 막습니다. 발송 후에는 생성 이력 식별자·계산 결과·메시지 ID·중복방지 기록만 보존합니다. 검증된 이전 정지의 전달 이력은 별개의 신규 정지를 막지 않지만 같은 정지는 다시 보내지 않습니다.
정지명단·최근 변경 감지기존 1시간 주기 회원목록 Excel의 정지명단과 최근 48시간 날짜 범위의 수강권 최종 수정일을 확인합니다. 사용 중인 유효 수강권의 최근 변경은 원본 읽기 요청일 뿐 홀딩 등록이나 발송 근거가 아닙니다. 수정일은 날짜만 있어 새 정상 동기화마다 같은 날 변경도 재확인합니다. 최초 기준선은 무발송이며 필수 열 누락·조회 실패·큰 범위 감소 시 기준선을 유지합니다. 원본 ID 미확인·동일 상품 중복은 확인필요로 보류하고 추측하지 않습니다.
실행 주기기존 1시간 주기 회원 동기화가 정상적으로 최신 Excel을 가져온 뒤 원본 재조회·발송을 이어갑니다. 즉시발송이 아니며, 공유 브라우저 대기나 대상 증가 시 다음 실행으로 이월될 수 있습니다. 회당 최대 10건이며 신규·변경 건을 우선하되 계속 정지 중인 명단도 순환 확인합니다. 더 잦은 전체 회원 조회는 추가하지 않습니다.
브라우저 대기다른 작업이 공유 브라우저를 쓰면 최대 15초 기다리고, 취득하지 못하면 발송 시도 없이 pending으로 이월합니다. 재조회 가능 시각은 5→10→20→30분으로 늘리고 최대 30분으로 제한하며 새 Excel에도 같은 회원·수강권의 대기를 보존합니다. 이는 실행 예약이 아니며 기존 1시간 주기의 다음 정상 동기화에서만 다시 확인합니다. 별도 스케줄러는 만들지 않습니다. 연속 대기가 최초 발생부터 2시간 이상 지속될 때만 운영자에게 알립니다. 원본 불일치·접수 불명확 오류까지 이 유예를 적용하지 않으며, 접수 완료·불명확 건의 선점과 발송 원장을 보존하고 재발송하지 않습니다.
배포·확인브라우저 회차 재사용·잠금 대기·Excel 종료 정리의 대상은 맥미니 처리기와 이 CORE 운영규칙입니다. Functions·Firestore 규칙·1시간 주기·중복방지 키·09~23시 회원 발송시간은 유지합니다. 합성 세션·잠금 경합·중단·대기 이월·메일 키·홀딩 발송 안전장치를 무발송으로 검증합니다. 운영 반영·Hosting·CI 결과는 2026-10-24 holding-browser-coordinator 보고서에 구분하며 실제 자연 처리 결과는 별도 확인합니다. 모든 자동화의 상시 중앙 브라우저 전환은 아직 하지 않았습니다. 최종 갱신: 2026.10.24.

운영규칙 위계

운영자가 문제를 찾을 때 이 순서로 이동합니다.

2-click map
운영자 통합 조회 · 2026-10-13운영자 시퀀스 목록은 전체 강사를 기본으로 보여주며 내 시퀀스로 전환할 수 있습니다. 한 번에 100개를 최신순으로 조회하고 더 보기로 이어서 확인합니다. 강사는 현재 근무·첫 비밀번호 변경·새 로그인 검증 후 본인 UID 자료만 조회합니다. 운영자는 다른 강사 원본을 보기·PDF로 확인할 수 있지만 수정·삭제·소유권 변경은 할 수 없습니다. 본인 자료의 저장·수정·삭제 규칙은 유지합니다. 원천: sequenceNotes와 sequenceNoteImages. 권한은 서버 규칙에서 확인하며 이름으로 부여하지 않습니다. 삭제본은 전체 목록에서 제외합니다. 상태: Hosting·Firestore 규칙·조회 인덱스 운영 반영 완료. 검증: 권한 345건과 모바일·태블릿·PC 회귀 통과, 2026-10-13 실제 운영자 전체 조회·보기·PDF와 강사 본인 조회 확인. 조회 오류 시 목록 다시 확인을 사용합니다. 기존 노트·로그인 권한·비밀번호는 변경하지 않습니다.

시퀀스 노트 · 2026.10.08

목적·구현CORE 메뉴의 시퀀스 노트에서 수업 동작·큐잉을 작성하고 PDF로 내려받습니다. 제공된 작성기의 예시, 사진 첨부, 시퀀스 보관, JSON 백업·복원을 유지합니다.
화면 간소화 · 2026-10-11작성·미리보기·내 시퀀스 중심으로 소개 문구·장식 패널을 제거했습니다. 예시·AI 요청문·라이선스는 상단 도구, JSON·인쇄는 미리보기의 파일·인쇄, 기록 가져오기·백업은 내 시퀀스의 불러오기·백업에서 사용합니다. 새 작성의 강사명은 직접 입력하며 기존 저장본·체어 예시의 작성자는 유지합니다. 저장·충돌·작성일·PDF·삭제 규칙과 canonical sequenceNotes·sequenceNoteImages·UID 권한은 변경하지 않습니다. 영향: 편집기 화면·CORE 운영규칙, Hosting만 배포. 격리 UI 154건·저장/PDF 26건·권한 단위검사 224건과 320·390·768·1440px 검증 완료. 실데이터 변경 없음, 실제 iPhone Safari는 별도 확인 대상입니다. 이 기록이 포함된 Hosting 릴리스부터 적용되며 배포 버전은 release.json에서 확인합니다. 다음: 저장 완료 확인 후 새로고침합니다.
모바일 화면 정렬 · 2026-10-11로그인 사용자 표시와 작성기가 가로로 나란히 놓여 화면이 밀리던 배치를 수정했습니다. 사용자 이름·로그아웃은 작성기 위에 표시하고 작성기는 남은 높이와 전체 본문 폭을 사용합니다. 저장 원천 sequenceNotes·sequenceNoteImages와 소유자 UID·PDF·삭제 규칙은 유지합니다. 격리 화면 154건, 저장·PDF 회귀 26건과 320·390·768·1440px 배치를 검증했습니다. 실제 iPhone Safari는 별도 확인 대상입니다. 이 기록이 포함된 Hosting 릴리스부터 적용되며 배포 버전은 release.json에서 확인합니다. 다음: 편집 중에는 저장 완료 후 새로고침합니다.
원천·저장Firestore sequenceNotes가 원천이며 sequenceNoteImages에 JPEG 사진을 따로 저장합니다. 본인 Firebase UID 기준으로 기기 간 이어서 작성합니다. 강사 간 원본은 비공개이며 운영자만 전체 원본을 읽기 전용으로 확인할 수 있습니다. 기존 운영자 권한은 유지하고, 강사는 첫 비밀번호 변경·새 로그인·현재 근무 게이트를 통과한 뒤 본인 UID 기록만 사용합니다. 강사 접근은 2026-10-11 강사 CORE 접근 규칙에 따라 운영 반영·라이브 검증됐습니다. 운영자 전체 시퀀스 조회는 아래 2026-10-13 통합 조회 규칙을 따릅니다. 사진은 긴 변 640px·64KB 이하로 압축하며 Drive·Storage는 사용하지 않습니다. 이미지와 본문은 검색 인덱스에서 제외합니다.
기존 작성본 계정 연결 · 2026-10-12운영자 계정에 남아 있던 정유리 작성본 6개를 승인된 일회성 작업으로 정유리 강사 UID에 이관했습니다. canonical staffs·Firebase Auth·본문 작성자를 대조하고 비공개 백업 후 적용했으며, 내 시퀀스 조회 조건에서 6개와 내용·ID·작성일·수정일 보존을 확인했습니다. 삭제본·다른 작성자·로그인 권한은 유지합니다. 이름만으로 조회 권한을 부여하거나 이후 자료를 자동 이관하지 않습니다. 추가 이관은 운영자 승인·검토 계획·원본 재확인 후 수행합니다. 도구는 assign-legacy-sequence-author이며 원천은 sequenceNotes·sequenceNoteImages입니다. 데이터 이관은 완료됐고 이 기록이 포함된 CORE Hosting부터 안내가 반영됩니다. 실제 강사 기기 로그인 확인은 별도이며, 다음: 작성 중인 내용은 저장·백업 후 내 시퀀스를 새로고침합니다.
저장·예외입력 중 2.5초 대기 또는 15초 주기로 변경분을 묶어 저장하며 서버 확인 후에만 저장 완료로 표시합니다. 최신 100개 기록을 조회하고 선택한 노트의 사진만 읽습니다. 동시 수정은 버전 비교로 차단하고 최신 기록 열기 또는 사본 저장을 선택합니다. 저장 실패 시 응답 파일을 백업합니다. 기존 브라우저 기록은 가져오기 승인 후 옮기며 원본은 삭제하지 않습니다. 삭제된 노트의 표식은 남겨 오래된 기기의 재생성을 막고 사진은 제거합니다.
메뉴 이동 저장 보정 · 2026-10-12메뉴 내용 프레임과 상위 화면의 Firebase 연결이 다른 실행 환경일 때 저장 객체가 거부되던 문제를 보정합니다. 본문·사진·삭제 표식의 쓰기 객체만 공통 형식으로 만들고 서버 시각·UID·버전 비교는 유지합니다. 저장 완료 전 이동 차단은 해제하지 않습니다. 저장 실패 화면의 작성 내용 백업은 서버 저장 없이 현재 입력을 JSON으로 내려받습니다. 원천 sequenceNotes·sequenceNoteImages, 권한·기존 자료는 변경하지 않습니다. CORE Hosting 반영 대상이며 검증·배포 상태는 2026-10-12-sequence-cross-frame-save 보고서와 release.json을 따릅니다. 다음: 미저장 내용은 백업한 뒤 새로고침하고 응답 불러오기로 새 사본을 저장합니다.
새 작성·기존 수정메뉴 진입·새로고침은 새 빈 시퀀스로 시작합니다. 기존 기록은 내 시퀀스의 수정으로 열고, 다른 수업에 활용할 때는 사본 만들기를 사용합니다. 새 시퀀스는 이전 변경분을 저장한 뒤 별도 ID로 시작하며 저장 실패 시 전환하지 않습니다. 백업은 저장 완료 후 서버에서 최신 목록을 다시 조회합니다.
PDF 저장·삭제내 시퀀스의 PDF 저장은 선택한 서버 저장본과 사진을 PDF로 내려받으며 현재 편집 중인 노트를 바꾸거나 덮어쓰지 않습니다. 응답 파일과 최근 기록 백업은 복원용 JSON으로 별도 유지합니다. 삭제한 ID는 삭제 표식으로 남아 다른 기기의 오래된 저장으로 되살릴 수 없습니다. 이전 브라우저 기록은 자동으로 가져오지 않습니다. 동일 제목의 원본·사본·복구본은 별개 기록이므로 하나를 삭제해도 나머지는 유지합니다.
작성일·복구일내 시퀀스 목록에 한국시간 기준 작성일을 표시합니다. 최초 서버 저장 시 createdAt을 기록하며 수정·사본 원본 편집으로 바꾸거나 지울 수 없습니다. 기존 기록은 Firestore 문서의 실제 최초 생성시각으로만 보완합니다. 이전 브라우저 작성일을 추정하지 않으며, 복구 기록은 복구일로 구분하고 수업일은 별도로 표시합니다. 날짜가 확인되지 않으면 확인 필요로 남깁니다. 2026.10.08 작성일 변경 당시에는 CORE Hosting과 날짜 보호 규칙만 대상으로 기존 권한·인덱스를 유지했습니다. 이후 강사 본인 UID 접근은 별도 강사 CORE 접근 규칙을 따릅니다.
복구·확인 · 2026.10.08최근 기록 자동 열기와 같은 ID 자동 저장이 겹쳐 이전 수업이 덮어써진 원인을 수정했습니다. Firestore 시점 복구 기록에서 이전 수업 2개를 별도 ID로 복원했고 현재 노트와 기존 예시, 삭제 표식은 유지했습니다. 복구 전 원본과 감사 자료는 운영 호스트의 비공개 백업에 보관합니다. 검증 상태와 배포 버전은 릴리스 기록과 작업 보고서를 따릅니다.
영향 범위운영자와 접근 조건을 통과한 강사는 본인 UID의 시퀀스 전용 원천만 읽고 씁니다. 일반 저장·조회는 소유자를 변경하지 않으며 기존 작성본의 별도 승인 이관만 예외입니다. 회원·예약·알림톡·Notion·정산·연락처 자동화는 변경하지 않습니다. 시퀀스 데이터는 회원 대상 발송·예약·환불 등의 판단 원천으로 사용할 수 없습니다. 시퀀스 자체의 배포 대상은 Firestore 규칙·인덱스와 CORE Hosting이며 강사 접근의 Functions·배포·검증 상태는 별도 강사 CORE 접근 규칙을 따릅니다.
검증·상태2026.10.08 작성일 변경의 로컬 작성·저장 회귀 20건과 Firestore 규칙 215건을 통과했습니다. 새로고침 후 별도 저장, 원본을 보존한 사본, 저장 중 전환, 최신 서버 백업을 확인했습니다. 2026-10-11에는 별도 격리 라이브 테스트로 변경 후 새 로그인, 강사 본인 시퀀스·사진 저장/조회/삭제, 타 UID 접근 차단, 삭제본 복구 방지와 비근무 차단을 확인했습니다. 시험 계정·기록·사진·브라우저는 정리했으며 실제 회원 자료는 변경하지 않았습니다. 다음 조치: 기존 편집기는 저장 완료 확인 후 새로고침합니다. 관리자 통합 조회는 별도 작업으로 아직 미배포입니다. 최종 갱신: 2026-10-11.

알림톡 카탈로그 · 2026.09.30

소스 정책 기준
목적·구현2026.10.12 전체 SOLAPI 목록과 canonical 후보·발송 원장을 대조했습니다. 사용 종료 5종을 삭제하고 CORE 현재 목록은 운영 연결 18종·별도 채용 1종으로 정리했습니다. 삭제 대상의 대기 작업은 0건이며 현재 양식의 본문·이미지·버튼·발송 주기는 변경하지 않습니다.
종료·보존종료: 웰컴 v5, 담당강사 프라이빗 사전설문 v1, 담당강사 그룹 사전확인 제출 v1, 회원용 강사 변경 v1, 회원용 수업 일정 변경 v1. 운영자 미사용 확인과 삭제 승인에 따라 SOLAPI에서 삭제하고 개별 HTTP 404 TemplateNotFound·전체 목록 재조회로 확인했습니다. 웰컴 v5 상태 동기화도 종료하며 기존 발송·설문·중복방지 이력은 삭제하지 않습니다. 발송 이력별 템플릿에는 과거 양식 이름이 남을 수 있습니다.
배포·검증원천: SOLAPI 전체 목록, alimtalkCandidates·alimtalkSends, 현재 소스 매핑. 영향: CORE 템플릿 목록·운영규칙, functions-alimtalk·functions-private-chart, 템플릿 생성 보조 스크립트. 공급자 삭제 완료, 코드·화면은 이 규칙이 표시되는 Hosting 릴리스에 포함합니다. 신규 발송·재발송은 수행하지 않습니다. 면접 안내는 별도 ARCHIVE APPLY 연결이 있어 보존하며 해당 프로젝트 설정은 이번 서비스 계정 권한으로 조회하지 못했습니다. 다음: 삭제 확인은 개별 재조회로만 갱신하고 무발송·미연결만으로 자동 삭제하지 않습니다.
원천·정책ALIMTALK_TEMPLATES, ALIMTALK_TEMPLATE_TARGET_RULES, TICKET_NOTICE_POLICY와 실제 스케줄 소스에서 생성한 읽기 전용 카탈로그를 사용합니다. 목적·시기·대상·제외·정책 지문을 표시하며 발송 대상 선정에는 사용하지 않습니다. 템플릿 카탈로그
운영 원칙네 잔여 수강권 템플릿은 소스에 검토된 사실 안내 계약입니다. 후속권 보유만으로 후보를 제외하지 않으며 현재 계약의 재심사는 요구하지 않습니다. 알 수 없거나 본문·버튼이 달라진 계약만 원문 검토가 필요합니다. 예약 오픈은 케어 교차제한과 분리합니다. 공급자 승인·운영자 승인·소스 연결·실제 배포·발송 결과는 각각 별도 증거로 확인합니다.
승인 범위최초 승인 명단·수신자·본문 스냅샷은 변경하지 않습니다. 승인 후 추가 대상 또는 수신자·본문 변경은 10건 미만이어도 별도 추가분 승인이 필요합니다. 같은 내용이라도 후보 ID가 재생성되면 이전 승인을 재사용하지 않고 확인 대기로 둡니다. 승인 연결이 없는 이전 대기 건도 자동 처리하지 않습니다. 웰컴·리포트·강사레슨 등 독립 승인 경로는 그대로 유지합니다.
대상 제외스텝 등급·현재 근무 스텝 연락처 제외를 유지합니다. 강사레슨 상품·예약은 일반회원 안내에서 제외하며, 강사회원이 일반 정규권도 보유하면 해당 정규권 안내는 허용합니다. 강사레슨 전용 안내와 기존 명시적 테스트 예외는 유지합니다. 상품 분류가 변경된 기존 후보도 발송 직전 원천을 다시 확인합니다.
검증·상태기존 135건 검증에 제외 규칙 25건을 추가했습니다. Functions 빌드·경계 검사와 반응형 90개 검사를 통과했습니다. 2026.09.30 16:44 KST에 사실 안내 4종의 SOLAPI 승인·본문·버튼 일치를 확인했습니다. 이는 해당 시점의 점검이며 카탈로그의 실시간 공급자·배포 상태 연결은 아닙니다. 실발송과 Firestore 에뮬레이터 검증은 수행하지 않았습니다.
자동 검증기존 CORE 업무 검증과 Hosting 검증은 카탈로그 소스 일치 검사를 먼저 실행합니다. 정책 소스가 바뀐 뒤 카탈로그를 재생성하지 않으면 검증을 중단합니다. 생성: generate:alimtalk-catalog. 확인: validate:alimtalk-catalog. 이 연결은 배포 실행이나 운영 승인으로 간주하지 않습니다.
전환·다음과거 승인 기록을 일괄 수정하거나 후보를 재발송하지 않습니다. 재생성·연결 미확인 건은 원천과 이전 발송을 확인한 뒤 승인합니다. 사실 안내는 후속권이 있어도 유지하고 재등록 관리의 후속권 제외는 유지하는 검사를 배포 전 필수 실행합니다. 화면 버전은 릴리스 기록, 서버 상태와 발송 성공은 별도 증거로 확인합니다. 최종 갱신: 2026.09.30.

운영 메일 자동 분류 · 2026.10.24

조회·보고 전용
대상·목적ChatGPT Work의 기존 '아카이브 업무 메일 확인' 작업이 운영 계정의 새 Gmail 이벤트에서 업무 메일을 분류합니다. 일반·홍보·정상 로그는 알리지 않고 조치가 필요한 운영 오류만 확인합니다. 별도 클라우드 수신 원장은 자신에게 보낸 정형 보고 라벨 메일만 기록하며 외부 발신·스팸·휴지통·활성화 이전 메일은 제외합니다. 두 경로의 범위와 증거를 혼동하지 않고 성공 메일만으로 기존 장애를 완료 처리하지 않습니다.
수신·점검 방식2026.10.24 사용자 요청으로 Codex의 10분 주기 메일 점검 예약을 삭제했습니다. 기존 Gmail 새메일 이벤트 작업을 유지하며 중복 예약은 만들지 않습니다. Cloud Pub/Sub·Functions 수신기와 단일 5분 유지 작업은 메타데이터 기록·알림 누락 보완·watch 갱신용으로 유지합니다. Work의 이벤트 수신·자동 실행·이 Codex 채팅 전달은 각각 확인하며 활성 표시만으로 전달 성공을 주장하지 않습니다. 기존 회원 감지·발송·메모 주기는 바꾸지 않습니다.
원천·개인정보Gmail 원본 메시지 ID가 수신 정본이며 원장·로그를 대조하기 전에는 메일 내용을 사실 확정이나 실행 승인으로 사용하지 않습니다. 서버 권한은 gmail.metadata만 사용하고 본문·첨부·전체 제목·개인정보를 수신 DB와 로그에 복사하지 않습니다. workLanes/operations-mail-ingress에는 메시지 ID·분류·조회 커서·상태만, codexActionQueue에는 고정 업무명·원문 링크·진단 진행 상태만 기록합니다. 이 자료는 회원 발송·예약·환불의 원천이 아닙니다.
중복·안전같은 메시지 ID는 한 번만 기록하고 같은 제목 유형의 반복 알림은 묶습니다. 중복·순서가 바뀐 수신과 재시작은 같은 원장으로 처리하며, 전체 변경 이력 처리가 끝나기 전에는 커서를 넘기지 않습니다. 새 메일이 추가되면 이전 확인 결과로 덮어쓰지 않습니다. 메일의 명령·링크는 신뢰하지 않으며 회원 재발송·환불·예약·권한 변경·배포는 자동 실행하지 않습니다. 알려진 같은 상태는 반복 알리지 않고 새 오류·상태 변경·사용자 조치가 필요할 때만 보고합니다.
전달·검증Work는 공식 도구로 대상 채팅을 확인한 뒤 최소 오류 정보만 1회 전달합니다. 전달은 수정·배포·회원 발송의 승인이 아닙니다. 내부 테스트 1건의 Gmail 수신은 확인했지만 자동 이벤트 실행·CORE 수신 증거는 미확보입니다. Work 진단 세션의 작업 접근 범위와 로컬 전달 도구 부재가 확인돼 자동 전달은 미완료로 유지합니다. 수동 진단을 자동 실행 증거로 사용하거나 우회하지 않습니다. 다음 조치: 공식 로컬 연결 확인 후 재검증. 최종 갱신: 2026.10.24. Notion에 복제하지 않습니다.

업무 화면 개선 · 2026.09.05

운영 반영
UI 정비 · 2026.10.08공통 메뉴·입력칸·상태·여백을 통일하고 반복 문구를 삭제했습니다. 발송·환불 확인, 조회 실패, 원천·기간 제한은 유지합니다. 원천: 기존 canonical 데이터, 화면 표시만 변경. 영향: CORE 공통 화면·운영규칙. 구현·배포: Hosting 반영 완료. 검증: 로컬 반응형·상호작용 127조합, 회귀 108건, 라이브 반응형 95조합 통과. 두 CORE 주소의 릴리스와 새 자산 원천 일치를 확인했습니다. 실회원 쓰기·발송은 실행하지 않았습니다. 배포 버전: 릴리스 기록. 차단·다음 조치: 없음.
CRM 디자인 개편 · 2026.10.08목적: 일상 업무의 가독성과 조작 피드백 개선. 구현: 공통 메뉴·목록·입력폼·검색창 정비, 150~180ms 진입·펼치기 효과, 동작 줄이기 설정 지원. 운영 규칙: 버튼은 즉시 실행하며 애니메이션 완료를 기다리지 않습니다. 로그인 화면이 떠 있을 때 배경 메뉴는 키보드 선택에서 제외하며 로그인 후 복원합니다. 원천: 기존 canonical 데이터 유지. 영향: CORE 공통 UI와 프라이빗 보드 배치만 변경; 로그인 판정·시퀀스 편집기 내부·발송·예약·환불·자동화 주기는 변경하지 않습니다. 검증: 로컬 회귀 118건·화면 183조합 통과, 실회원 변경 없음. 배포상태: 이 기록이 표시되는 CORE Hosting 릴리스에 포함하며 현재 버전은 릴리스 기록에서 확인합니다. 차단: 없음. 다음: 운영 중 화면 이상이 있으면 해당 메뉴와 화면 크기를 확인합니다.

오늘 업무와 이력

  • 재등록은 오늘 연락, 예정, 복귀 대기, 처리 이력으로 나눕니다. 같은 연락처의 회원은 한 줄로 표시하되 수강권별 상담 상태는 각각 저장합니다.
  • 새로 조회한 memberProfiles 수강권을 회원 요약보다 우선합니다. 새 수강권이 확인된 건은 처리 이력에 표시하고 원본 상담 문서는 임의로 삭제하지 않습니다.
  • 연락완료·고민중·미래 재확인 예약은 예정에, 완료·제외는 이력에 표시합니다. 실제 알림톡 발송 대상·중복 금지 규칙은 변경하지 않습니다.
  • 최근 알림톡 내역과 미해결 상태 조회는 분리합니다. 조회 실패는 확인 필요, 상태별 조회 300건 초과는 최소 집계로 표시합니다.
  • 실패 업무는 최근 7일 활동 또는 오늘 이후 예정 건을 우선 표시합니다. 날짜 없는 실패는 숨기지 않으며, 이전·테스트 실패는 알림톡 화면의 접힌 이력에 보존합니다. 오래되었다고 완료 처리하거나 다시 발송하지 않습니다.

업무별 확인

  • 프라이빗은 오늘과 최근 7일 미처리를 나눕니다. 리포트 공개만으로 전달 완료로 판단하지 않고 발송 상태·기록을 확인합니다.
  • 강사레슨 일정의 명단은 좌석 수와 같은 원천 집합으로 표시합니다. 접수 처리 건수와 수강권 보유 인원은 별개의 수치입니다. 반배정·예약은 계속 수동입니다.
  • 주차는 오늘 작업과 남아 있는 실제 실패를 우선 표시합니다. 이전 입차 미확인은 이력으로 접으며, 할인·재시도·알림 정책은 유지합니다.
  • 평가 자료 없음은 0점이나 개선필요로 해석하지 않습니다. 추천식단 설문 요청과 검토 화면은 서로 연결합니다.
원천·경계memberProfiles, renewalCases, alimtalkCandidates/Sends 및 가입서 요청, privateLessonSessions/ChartRecords, 강사레슨 일정 빌더의 기존 수강권·예약·접수 입력을 사용합니다. 추가 명단은 화면 조회용이며 발송·예약 원천으로 재사용하지 않습니다. 새 컬렉션·타깃 전환·운영 데이터 일괄 변경은 없습니다.
검증·배포2026.09.05 · 핵심 단위 59건, 합성 데이터 브라우저 76건, 반응형 85개 화면 조합 통과. functions-app·functions-private-chart 업데이트와 변경 함수 ACTIVE 확인. CORE 사용자 도메인·web.app 배포 및 실제 운영자 조회 확인: 재등록 오늘 8명·예정 24명·복귀 대기 65명, 9/19·9/20 강사레슨 각 10명 명단이 수강권 원본과 일치. 프라이빗 오늘/최근 7일 미처리 전환 확인. 실제 발송·예약·상담 변경은 검증 범위에서 제외했습니다. 다음 조치: 배포본 release.json 기준 main 일치 확인. 담당: Codex.

1. 공통 운영 원칙

모든 운영 판단과 자동화 변경에 먼저 적용합니다.

active

우선순위

  • 보안·개인정보가 최우선입니다.
  • 계정·권한 변경은 실행 주체와 승인 라인을 남깁니다.
  • 운영 연속성, 자동화, 배포, 데이터 동기화는 중단 기준과 복구 조건을 같이 기록합니다.

CORE 홈 노출 기준

  • 홈에는 운영자가 직접 처리할 미해결 업무만 표시합니다.
  • 알림톡 실패, 회원가입서 후속 실패, 자동화 실패, 운영자 매칭 판단이 필요한 데이터 이슈는 해결될 때까지 남깁니다.
  • 프라이빗 리포트 진행 건은 홈 미해결 액션 총합에 넣지 않고, 별도 프라이빗 카드와 Private 탭에서 확인합니다.
  • 프라이빗 진행 카운트와 단계별 보드는 오늘 수업과 최근 7일의 미완료 건만 집계합니다. 오래된 기록은 원본에 남기되 홈 운영 큐에는 누적하지 않습니다.
  • 정상 정규화, 중복 차단, source import row 수, canonical key 정리, 이름/전화번호 누락으로 외부 실행에서 이미 제외된 행처럼 운영자가 액션할 수 없는 기록은 자동 리졸브하거나 시스템 진단에만 보관합니다.
  • 같은 내부 경고가 반복되거나 자동 처리가 실패하면 그때 운영 큐로 승격합니다.
  • 주 탐색 메뉴에서는 사용 빈도가 낮은 회원·수업·콘텐츠 화면을 제외하고, 기존 직접 URL은 점검과 예외 업무를 위해 유지합니다.
  • 회원등록 메뉴는 최근 14일의 회원 감지·수강권 확인·계약서 발송·서명·웰컴 알림톡 진행상황과 중단 사유를 표시합니다. 신규회원과 수강권 등록은 페이지 상단 StudioMate 회원등록 버튼에서 시작합니다. 강사레슨 메뉴는 기존대로 이름·전화번호·수강일 등록부터 StudioMate 수강권과 신규 강사회원 가입서까지 처리하며, 반배정·예약은 운영자가 직접 처리합니다.

원천 보호

  • 알림톡, 연락처, StudioMate write, 예약·결제 판단은 canonical source에서만 실행합니다.
  • 데이터는 source, action, computed, mirror, incubation 5개 층으로만 구분합니다.
  • source는 memberProfiles, memberContactIndex, bookings, lectures, memberMemos, memberTags, privateSurveyRequests, privateSurveyResponses입니다.
  • 예약·출석·프라이빗 회차 판단의 단일 예약 원천은 bookings입니다. memberUsageEvents는 legacy 검증·백필 자료로만 보관하고 운영 원천으로 사용하지 않습니다.
  • action은 alimtalkCandidates, alimtalkSends, contactSyncJobs, memberSignupContracts, onsiteWelcomeRequests, instructorLessonRegistrations, privateLessonChartRequests, privateLessonChartRecords입니다.
  • computed는 privateSessionLedger, privateLessonSessions, attendanceSummaries, adminActions, instructorViews, dashboardSnapshots입니다.
  • member360Cards, members 하위 컬렉션, dashboardSnapshots는 분석·검토용 read-model입니다. 현재 수강권, 재등록 후보, 외부 실행 대상 판단은 최신 memberProfiles를 우선합니다.
  • workLanes는 임시 작업 공간이며 외부 발송·쓰기 원천으로 사용하지 않습니다.

식별과 중복

  • 회원 매칭은 memberId, 전화번호, 이름 순서로 확인합니다.
  • 동명이인은 전화번호나 StudioMate ID 확인 전까지 합치지 않습니다.
  • 예약 중복은 공통 canonical booking resolver를 사용해 판단합니다.
  • 실제 StudioMate/API record가 있으면 usage_booking_, excel_booking_, excel_ fallback보다 우선합니다.
  • 후보 생성, 설문, 리포트, 알림톡 발송 전에는 연결 booking이 active인지 확인합니다.

기록 형식

  • 목적, 현재 구현 상태, 운영 규칙, 데이터 원천, 배포 상태, 검증, 차단점, 다음 액션을 함께 남깁니다.
  • 새 운영 규칙은 Notion이 아니라 이 탭에 반영합니다.
  • 직원 행동이나 회원 커뮤니케이션이 바뀌면 코드 배포와 운영규칙 업데이트를 같은 작업으로 봅니다.

운영 액션 수명주기

  • 홈에는 canonicalActionKey 기준으로 중복을 제거한 미해결 액션만 표시합니다.
  • 상태는 open, acknowledged, in_progress, blocked, resolved 순서로 관리합니다.
  • resolved 항목은 홈과 미해결 KPI에서 즉시 제외하고 이력 화면에서만 확인합니다.
  • 운영자 판단이 필요한 액션에는 owner, dueAt, resolutionCode, resolvedBy, resolvedAt을 기록합니다.
  • 자동 복구된 원본 중복, 정규화, 캐시 지연은 홈 액션으로 올리지 않고 진단 로그에만 남깁니다.

2. 데이터·동기화

StudioMate API가 아니라 Excel-first 운영을 현재 기본 모드로 사용합니다.

excel-first

StudioMate 동기화

  • ARCHIVE PILATES 자사 예약 시스템 운영 전까지 StudioMate API 모드는 사용하지 않습니다.
  • 회원목록, 수업예약내역, 삭제된 수업 로그는 Mac mini Playwright Excel 다운로드로 수집합니다.
  • 엑셀 다운로드와 Firestore 반영은 1시간 간격 LaunchAgent가 담당합니다.
  • 운영자 수동 동기화 버튼도 API가 아니라 Excel 다운로드·반영 요청을 생성합니다.
  • 수업예약내역 엑셀은 다운로드 기간의 최신 예약 스냅샷으로 보고 bookings를 reconcile합니다.
  • 예약 회원 매칭은 StudioMate 예약 원천의 연락처만 1순위로 사용합니다. 엑셀에서 010 번호가 숫자형으로 바뀐 경우도 010 형식으로 복원한 뒤 매칭합니다. 같은 연락처 회원카드가 여러 개면 이름 일치, 활성 수강권, 실제 StudioMate ID 보유 여부로 대표 회원을 고릅니다. 연락처가 있지만 회원카드가 없으면 회차·예약 집계용 예약 전용 프로필을 만들고 외부 발송/쓰기 원천으로는 쓰지 않습니다.
  • 회원목록·수업예약내역 엑셀이 Firestore memberProfiles/bookings에 성공 반영되면 Mac mini 로컬 원본 파일은 즉시 삭제합니다. Google Drive에서 직접 선택한 원본은 자동 삭제하지 않습니다.
  • 같은 회원·시간·강사·수업으로 판단되는 예약은 canonicalBookingKey를 기준으로 1개만 active로 남기고, 과거 excel_booking_ 중복 문서는 superseded_by_latest_reservation_import로 회차와 알림톡 대상에서 제외합니다.
  • 최신 예약 엑셀 범위에서 사라진 기존 예약은 missing_from_latest_reservation_import로 취소 처리하고 회차 집계에서 제외합니다.
  • 다운로드 기간 밖의 과거 예약은 기존 상태를 확정 상태로 두되, 과거 미체크 예약은 프라이빗 확정 회차에 세지 않고 출석확인필요로 봅니다.

회원·수강권

  • memberProfiles는 화면과 후속 실행을 위한 정규화 뷰입니다.
  • 현재 활성 수강권 판단은 memberProfiles.activeTickets를 우선합니다. member360Cards나 members 하위 summary가 더 오래된 경우 CORE 화면은 memberProfiles 값으로 덮어 표시합니다.
  • 구매금액과 누적매출은 member360Cards와 members/{memberId}/purchases의 분석용 미러입니다. 결제금액 원천이 끊기면 임의 추정하지 않고 StudioMate 회원목록/수강권 결제 컬럼을 재수집해 미러를 재생성합니다.
  • 회원목록 Excel import는 활성 수강권 안에 결제금액, 결제일시, 결제방법을 함께 보존합니다. 새 엑셀 행의 결제 칼럼이 비어 있더라도 같은 수강권의 기존 결제 메타데이터를 지우지 않습니다.
  • CORE 데이터 검증은 audit:archive-core-data로 실행하며, 수강권 미러 지연·구매금액 미러 누락·회원 360 미러 누락을 운영자 액션 1건으로 요약합니다.
  • 엑셀에만 있는 회원은 등록 3일 이내이고 활성 수강권이 있을 때만 임시 회원카드를 만듭니다.
  • 수강권 없는 상담고객은 회원카드를 만들지 않고 연락처 후보로만 다룹니다.
  • 같은 연락처의 회원카드는 대표 회원카드 1개만 유지합니다. 중복이 생기면 전화번호 병합 가드가 실제 StudioMate ID, 활성 수강권, 정식 프로필을 우선 대표로 고르고 나머지는 mergedInto로 표시한 뒤 예약, 회차, 알림톡, 메모, 주차 참조를 대표 카드로 이동합니다.
  • excel_ 임시 회원은 studiomateMemberIdLookupJobs로 실제 StudioMate ID를 찾은 뒤 후속 쓰기를 진행합니다.

수업·폐강

  • 오늘부터 예약오픈 종료일, 즉 다음 주 일요일까지의 예약 데이터를 기본 범위로 봅니다.
  • 수업예약내역 엑셀에는 신뢰 가능한 최대정원 원천이 없으므로 정원 기반 판단은 쓰지 않습니다.
  • 삭제된 수업은 별도 야간 자동화가 아니라 1시간 Excel 동기화 안에서 함께 수집합니다.
  • 폐강 집계는 그룹 수업 중 최소 수강인원 미달 또는 제한된 클래스 폐강 조건만 포함합니다.

월간 StudioMate 운영 세트

  • 다음달 그룹수업 생성, 주제·기구 입력, 고정회원 예약은 하나의 월간 작업 세트로 실행합니다.
  • 쓰기 전 프리플라이트에서 원본 시트 구조, StudioMate 로그인, 회원 검색, 일괄예약 화면 진입, 정확매칭 수업카드를 먼저 확인합니다.
  • 일괄예약 화면을 못 열었을 때는 수강권 문제로 단정하지 않고 surface_failed로 분리해 재시도합니다.
  • 예약 완료 판정은 StudioMate 성공 메시지가 아니라 수업상세 예약회원 목록에서 회원명·전화번호가 확인될 때만 확정합니다.
  • 결과 시트에는 운영자가 확인해야 하는 실패·보류 건만 남기고, 성공 건은 요약 숫자로 관리합니다.
  • 프리플라이트와 dry-run은 백그라운드 단일 큐에서 실행하고, 수업 생성·주제 입력·고정예약 apply는 운영자 승인 후 같은 큐에서 직렬 실행합니다.

자동화 관제

  • 안정적인 정기 실행은 Mac mini LaunchAgent를 기본 주체로 둡니다.
  • Codex 앱 자동화는 테스트, 리뷰, 수동 fallback 용도이며 LaunchAgent와 같은 작업을 동시에 ACTIVE로 두지 않습니다.
  • ARCHIVE CORE 자동화 관제 탭은 Firestore automationStatus를 표시하므로, 새 자동화는 실행 주체와 상태를 automationStatus에 기록해야 합니다.
  • LaunchAgent와 Codex 자동화 정의는 sync:automation-observability로 점검해 CORE 관제에 반영합니다.
  • LaunchAgent는 로그 최신성뿐 아니라 실제 last exit code를 확인하며, 실행 실패를 최신 로그 생성으로 정상 처리하지 않습니다.
  • 회원·예약·매출 최신성은 다운로드부터 DB 반영까지 정상 완료한 원천 시각으로 판정합니다. 실패·dry-run·부분 반영 로그는 성공으로 인정하지 않습니다.
  • Playwright 실행 파일을 선행 점검합니다. 재실행 요청은 복구 완료와 구분하며, 실행 중 작업을 강제 종료하지 않습니다.
  • 시간별 StudioMate 동기화가 자정을 넘겨 중단되면 다음 정상 실행은 마지막 성공 예약일부터 최대 7일을 한 번 재수집합니다. 미래 예약 범위는 현재 날짜 기준을 유지하고, 변경된 프라이빗 회원의 회차만 다시 계산합니다.
  • 지난 프라이빗 수업의 출석 미체크와 실제 취소는 분리합니다. 최근 7일 또는 회차가 남은 수업을 확인 대상으로 보며, 동기화 중단 기간의 수업일이 확인되지 않으면 회차를 임의 삭제하지 않고 해당 기간 원천 재확인을 요청합니다.
  • GitHub 실패는 같은 workflow·main의 후속 성공 증거로 해소합니다. 조회 실패·생략·표본 밖 항목은 해결 완료로 처리하지 않습니다.
  • 점검 결과를 먼저 저장한 뒤 확인된 범위의 기존 오류만 종료합니다. 읽기 전용 점검은 상태 저장·자동복구·메일 발송 없이 검증합니다. 기준 갱신: 2026-09-07.
  • 2026-10-11 점검 개편: CORE 주요 화면 15개와 운영 중인 회원 설문·강사 기록·기존 계약 열람 링크 3개를 확인합니다. HTTP 2xx와 화면별 식별 문구가 모두 맞아야 정상이며 15초 시간제한을 둡니다. 공개 화면 응답은 로그인 후 기능 성공과 구분하고, 주간 운영자 권한 점검의 기본 대상은 CORE입니다.
  • 점검·실패·복구 메일은 ARCHIVE CORE 발송자와 [업무영역][상태] 핵심내용 · 날짜 형식을 사용합니다. 원인·영향·검증·다음 조치를 담고 업무 보고 라벨과 상태 라벨을 함께 붙입니다. 메일 발송 확인 후 라벨 오류로 재발송하지 않습니다. 실제 회원용 in.archivepilates.com 링크와 기존 원장·경로는 보존합니다.
  • 홀딩 확인필요 메일은 안정적인 오류 이벤트 해시로 중복을 막습니다. 메일 경로 수정은 회원 홀딩·알림톡 재발송 승인이 아닙니다. 계약 member_coverage_review는 줄어든 원천 행의 해당 회원만 검토하며 전체 동기화 실패로 표시하지 않습니다. 소스 235af444의 운영 실행기·영향 Functions 4개 코드베이스·Hosting 반영 완료. 함수 94개 ACTIVE, 변경 88개·무관한 6개 보존, Scheduler 21개 ENABLED와 기존 주기를 확인했습니다. 회귀 170건·PC/모바일 화면 검증과 읽기 전용 점검에서 긴급·경고 0건, 기존 계약 원천 확인필요 1건을 유지했습니다. 실제 회원 발송·계약 재전송·예약 변경은 하지 않았습니다. 다음: 계약 원천 1건 대조와 다음 정기 메일의 실제 렌더링 확인. 증거는 2026-10-11-core-health-mail-audit 보고서. 최종 갱신: 2026-10-11.
  • 운영 LaunchAgent는 임시 worktree가 아니라 최신 main을 반영한 /Users/archivepilates/dev/archive-in-runtime만 실행합니다.
  • 2026-10-11 폐기 경로 정리: 설치·실행이 없는 예전 연락처 동기화·회원 Excel 다운로드·예약 기한 작업 3개의 launchctl 활성 표시를 비활성으로 정리했습니다. 시간별 Excel 동기화와 contactSyncJobs, 연락처 Scheduler의 ENABLED·10분 주기는 유지합니다. 현재 스케줄러를 중지하던 예전 연락처 수동복구 파일과 실행 안내는 삭제하며 복구하지 않습니다. 계약 원천 차이는 최신 StudioMate 원본과 운영자의 삭제·취소 확인이 모두 맞을 때만 해당 회원의 기준을 단건 보정하고 감사 기록을 남깁니다. 이번 1건은 이 조건으로 보정했으며 계약 재생성·재발송은 하지 않았습니다. 전체 기준선 초기화와 과거 원장 삭제는 금지합니다. 36건 회귀 테스트를 통과했고 운영 반영·Hosting 게시 검증은 2026-10-11-retired-automation-cleanup 보고서에 기록합니다. 다음 정기 원천 수집에서 기존 경고 해소를 확인합니다. 최종 갱신: 2026-10-11.
  • 예약 가능 기한은 StudioMate 네이티브 반복설정을 사용합니다. 매주 월요일 날짜를 직접 쓰던 Mac mini LaunchAgent는 폐기했으며 시스템 점검이 복구하지 않습니다.
  • 호호요가 크롤링 자동화는 2026-08-28 폐기했습니다. LaunchAgent와 실행 코드는 복구하지 않으며 기존 구글시트와 과거 수집 결과만 기록으로 보존합니다.
  • 대기 작업이 없는 큐 폴러는 실행마다 보고서를 만들지 않고 15~30분 간격의 단일 idle heartbeat만 남깁니다.
  • 종료된 승인 확인 heartbeat, 비활성 plist, 합성 E2E 데이터와 반영 완료 원본 파일은 검증 후 정리하고 실제 회원·예약·발송 원천은 보존합니다.
  • 일반 자동복구 옵션은 Firestore 삭제 권한을 포함하지 않습니다. 만료 운영 데이터 정리는 주간 점검의 명시적 purge 플래그와 엄격한 보존 조건을 모두 통과할 때만 실행합니다.
  • 시간별 StudioMate Excel 동기화는 이전 반영 해시와 비교해 변경된 회원·수강권·예약·수업 문서만 씁니다. 같은 원본을 다시 내려받아도 변경 문서가 없으면 Firestore 본문을 다시 쓰지 않습니다.
  • 프라이빗 회차는 변경된 프라이빗 예약의 회원만 동기화 직후 보정합니다. 전체 월간 보정은 매일 23:30 안전 점검으로만 실행하며 시간별 동기화에서 다시 호출하지 않습니다.
  • 설문 미제출 점검은 최근 프라이빗 설문 후보만 조회하고, 이미 확인 메일을 만든 요청은 회원 응답·예약을 다시 조회하지 않습니다.
  • superseded, 취소, 대기, 결석 및 sessionOrder.counted=false 예약은 프라이빗 회차 누락 대상으로 보지 않습니다.
  • dirty worktree는 개발 정리 대상으로 별도 기록하며 회원·운영 시스템 장애 점수에는 포함하지 않습니다.
  • worktree 정리는 macOS Documents 권한 때문에 LaunchAgent에서 실행하지 않고, Codex 사용자 세션에서 감사 후 수행합니다.

Google Contacts

  • 기준 계정은 home@archivepilates.com입니다.
  • Google Contacts는 원천이 아니라 전화 발신·검색을 위한 보조 저장소입니다.
  • 연락처는 memberContactIndex와 contactSyncJobs 기준으로 큐를 만들고, dry-run 후 반영합니다.
  • 현재 근무 중인 강사·스텝 연락처는 이름 아카이브로 저장합니다.
  • 현재 근무 스텝이 아니면서 StudioMate 등급이 강사회원인 연락처는 이름 강사회원 가입일로 저장합니다.
  • 강사회원의 강사레슨 수강권 시작일은 강사레슨과 강사레슨 YYYY-MM-DD Google 연락처 태그로 저장합니다.
  • 연락처 작업 실행 직전에 최신 회원등급을 다시 확인해 오래된 신규회원 작업이 강사회원 이름을 덮지 못하게 합니다.
  • 같은 전화번호가 회원과 현재 근무 강사에 함께 등록되면 회원카드는 유지하고 Google 연락처 이름만 강사명을 우선합니다.
  • 강사 우선 여부는 active staffs의 전화번호로 판단하며, 전화번호가 없는 경우에만 이름을 보조 기준으로 사용합니다.
  • 강사 보호로 건너뛴 회원 연락처 작업은 synced가 아니라 skipped로 기록하고, 새 강사는 회원 연락처 동기화 전에 active staffs에 먼저 등록합니다.
  • Google-only 연락처 삭제, 연락처 병합, 대량 이동은 별도 승인 없이는 하지 않습니다.

원천 신선도와 화면 상태

  • CORE 수업 화면의 현재 원천은 bookings입니다. lessonOccurrences와 reservations는 전환기 보조 자료로만 사용합니다.
  • 회원 최근 방문은 memberProfiles.emergencyLastAttendance, lastAttendanceAt, recentVisitAt과 member360Cards.recentVisitAt 중 가장 최신 값을 표시합니다.
  • 모든 주요 화면은 정상, 빈 데이터, 원천 지연, 권한 오류를 서로 다른 상태로 표시합니다. 읽기 실패를 0건으로 표시하지 않습니다.
  • 원천 갱신 시각과 현재 시각의 차이를 표시하고, 오래된 데이터는 운영 판단 전에 재동기화하도록 경고합니다.
  • 강사 지표는 최근 2개월 자료만 현재 평가에 반영하고, 100%를 넘는 예약률처럼 해석이 불가능한 값은 원본 확인 상태로 둡니다.
  • 배포 전 validate:archive-core-hosting과 live rollback guard로 bookings 원천, 상태 표시, 외부 도구 바로가기, 운영 액션 필터가 보존되는지 확인합니다.
현재 확인 위치CORE Imports, Automation, Members / Firestore memberProfiles, bookings, memberContactIndex, contactSyncJobs

2A. 회원 전용 영상 시청 분석

판매·공유 권한과 분리된 관리자 전용 시청 로그로 반복 이용과 도달 흐름을 확인합니다.

implemented

목적과 범위

  • 아임웹의 판매영상 /archive-method-watch-* 페이지와 운영자가 명시 등록한 수강생 공유 페이지의 YouTube 플레이어만 측정합니다.
  • 수강생 공유는 운영자가 등록한 2026년 8월 A·B·C·D팀과 9월 19일 외부 피드백 A·B팀 경로만 허용하며, 공개 미리보기·상품 목록·그 밖의 프라이빗 페이지는 수집하지 않습니다.
  • 시청 기록은 영상 이용 현황과 재생 문제 확인을 위한 분석 자료이며 구매, 그룹 권한, 환불을 자동 변경하지 않습니다.

데이터 원천과 요약

  • videoWatchEvents는 적용 이후의 재생 이벤트 원천이며, videoWatchSessions는 회원·영상·세션 단위 계산 미러입니다.
  • 같은 회원과 영상에서 30분 동안 활동이 없으면 다음 재생을 새 세션으로 계산합니다.
  • 영상 길이의 90% 도달 또는 재생 종료를 90% 도달로 계산하며, 재생 전환 횟수는 실제 조회 세션 수와 구분합니다.
  • ARCHIVE CORE에서 판매영상과 수강생 공유를 분리해 조회하며, 적용 전 과거 시청 기록은 복원하거나 추정하지 않습니다.
  • ARCHIVE CORE에는 최근 시청순 회원 10명만 표시하고, 회원을 선택하면 해당 회원의 영상별 시청시간·최대 도달률·완료 이력을 표시합니다.

개인정보와 보존

  • 회원 이름은 관리자 전용 세션 요약에만 저장합니다. 전화번호와 원문 이메일은 시청 기록에 저장하지 않고, 아임웹 회원 식별값을 브라우저에서 다시 해시한 값과 마스킹된 계정 힌트를 함께 사용합니다.
  • 상세 이벤트는 180일, 세션 요약은 1년 보관하며 expiresAt TTL 정책으로 만료 처리합니다.
  • 시청 기록은 광고, 자동 메시지 대상 선정, 구매 권한 판정의 원천으로 사용하지 않습니다.

접근과 장애 격리

  • 영상 시청 현황은 ARCHIVE CORE 관리자 화면에서 staff와 manager 권한을 모두 확인한 뒤 조회합니다.
  • 추적 스크립트와 수집 API가 실패해도 YouTube 재생과 아임웹 구매자 접근은 계속 동작해야 합니다.
  • 배포 전 판매영상 권한 회원, 수강생 공유 권한 회원, 무권한 일반회원으로 나눠 기존 페이지 접근 권한이 바뀌지 않았는지 확인합니다.
공식 홈페이지 상단 메뉴 · 학습과 판매상품 분리목적: 교육 콘텐츠와 실물 판매상품을 구분하고 사용이 적은 커뮤니티 상단 항목은 제외합니다. implemented: 공식 홈페이지8개 공통 헤더를 팀아카이브·아카데미·판매상품·채용 순서로 구성합니다. 판매상품은 기존 /shop 링크를 유지한 독립 메뉴이며 아카데미에는 강사레슨·영상구매만 둡니다. 이전 커뮤니티 상단 숨김은 유지하고 본문 스튜디오 기록·게시글·이미지·기존 직접 링크와 아임웹 권한/상품은 변경하지 않습니다. 정본은 Git official-home HTML과 아임웹 메뉴 저장 상태입니다. verified: 현재 라이브 기준본과 소스를 대조한 뒤320·390·768·1440px 메뉴 간격·줄바꿈·아카데미 열기/닫기 및 판매상품 연결을 확인합니다. 배포: archive-pilates-home의 해당 HTML8개와 이 CORE 기록만 좁게 반영하며 다른 파일·설정·현재 운영규칙은 보존합니다. pending: 기존 게시판을 삭제하거나 직접 접근을 차단하지 않으며 새로운 상품·할인·권한·메시지 발송은 없습니다. 운영자 승인 없는 재노출·메뉴 추가는 하지 않습니다. 최종 갱신2026.10.28; 다음은 배포 후 라이브 메뉴 확인입니다.
아임웹 로컬 한도 · 관리자 화면 이어서 처리목적: 승인된 업무가 CLI 일일 수정 한도 때문에 중단되지 않도록 합니다. implemented: 공식 CLI 구조화 오류의 로컬 write_quota_exceeded·전송 전 차단만 식별하고 동일 승인·사이트·대상·필드·행동키를 유지한 비공개 후속 원장으로 연결합니다. 활성 Codex 작업은 별도 인앱 관리자 화면에서 이어가며 경로 변경만으로 재승인을 묻지 않습니다. verified: 두 판매상품과 전용 테스트 계정에 관리자 저장 후 공식 CLI 독립 재조회를 수행했습니다. 공통 분류·중복·불명 결과·원장 보존은 합성 테스트로 검증합니다. 정본은 현재 사용자 승인, 기존 상품/권한 원장과 아임웹 최신 저장 상태입니다. 운영: 같은 쓰기 잠금·저장 전 최신값 비교·의도 기록·저장 후 재조회를 필수로 하며 기존 구매·권한·최초40일·재고·가격을 보존합니다. 인증/권한 오류·서버429/API한도·보안 확인·전송 오류·결과 불명은 우회하지 않습니다. pending: 무인 작업은 중복 없는 후속 원장만 만들며 브라우저 실행 또는 완료로 표시하지 않습니다. 새로운 주기 조회·스케줄러는 추가하지 않습니다. 배포 범위는 로컬 실행 도구·운영 지침 및 이 CORE 기록이며 Functions 변경은 없습니다. 로그인 또는 새로운 승인 범위가 필요한 경우에만 운영자에게 요청합니다. 최종 갱신2026.10.28; 다음은 원장 기반 관리자 처리와 독립 검증입니다.
#9 C팀 유료 영상 · 판매 및 쿠폰 검증 완료목적: 배민진 AB11 바렐·정은영 AR7 리포머 판매와 구매자 시청을 연결합니다. implemented: 상품88·89 각각20,000원·40일 이용권, 별도 전용 그룹 제한 시청 페이지, 공개 쇼츠 미리보기와 내 강의실 연결을 게시했습니다. 유료33개·비공개16개 카탈로그와 기존 수강생 권한·최초40일 시계는 보존합니다. verified: CLI 한도 후 승인 범위의 관리자 화면으로 이어가 테스트 그룹 저장·판매중 전환을 수행하고 공식 CLI로 상태 외 상품 필드 불변 및 테스트 그룹0개 원복을 독립 확인했습니다. 일반 테스트 계정에서 두 풀영상이 실제 재생됐고320·390·768·1440px 강의실에 두 카드가 나타나며 가로 넘침이 없었습니다. 로그아웃·미구매 차단도 확인했습니다. 민진 전용2만원·발급 후3일·100명·회원당1회 쿠폰을 테스트 회원으로 발급해 결제 전20,000원 할인·총액0원을 확인했고 은영 상품에는 사용 가능0장이었습니다. 실제 결제 버튼은 누르지 않았습니다. 정본은 상품별 비공개 원장, 아임웹 상품·주문·그룹과 보호 페이지입니다. pending: 실제 주문 결제 후 자동 그룹 부여와40일 만료는 이번 테스트에서 실행하지 않았습니다. 테스트 발급1건은 감사 기록으로 보존하고 총100명 조건은 바꾸지 않습니다. 운영자에게 링크 전달 외 회원 메시지·쿠폰 일괄 배포는 하지 않았습니다. 배포: 두 아임웹 상품 판매중·보호 페이지·강의실 자산 반영 및 CORE 기록 동기화 대상; Functions·주기 작업·발송 정책 변경 없음. 최종 갱신2026.10.28; 다음은 실제 구매 운영 모니터링입니다.
상품 판매 시작 전 선차단 · 2026.10.26목적은 준비·질문·승인 대기 중 조기 구매를 막는 것입니다. 신규 상품·회차 전환·미래 판매 시작 시각이 지정된 상품은 내용 수정이나 추가 질문보다 먼저 해당 상품만 구매 불가로 저장하고 현재 상태와 직접 구매 링크를 독립 확인합니다. 다른 정상 판매 상품은 닫지 않습니다. 시각·필수 입력·승인·로그인 확인을 기다리거나 작업이 중단·실패해도 닫힌 상태를 유지합니다. 차단을 확인하지 못하면 판매 중일 수 있음을 즉시 보고하며 초안·문의 발송을 차단 완료로 보지 않습니다. 한국시간의 승인된 시작 시각 직전에 현재 시계·대상·후속 지시를 재확인하고 그전에는 열지 않습니다. 플랫폼이 종료 시각을 요구하면 임의 종료일을 넣지 않고 닫은 채 확인하며 별도 승인된 일회 오픈만 예약합니다. 예약 등록과 실제 판매 오픈·구매 가능 검증은 구분하고 다음날 반복 작업을 만들지 않습니다. 정본은 사용자 승인, 아임웹 최신 상품·옵션·주문·가격·실재고 및 비공개 상품 원장입니다. 저장 직전 API와 편집 화면을 대조하고 오래된 초안은 폐기해 현재 주문·재고·가격·옵션 코드를 되돌리지 않습니다. 승인된 상태·예약 필드만 바꾸고 의도·결과 불명·독립 확인을 기록하며 불명 저장을 반복하지 않습니다. 구현은 운영자·Codex 공통 지침과 기존 상품별 실행 원장·일회 예약입니다. 현재 11월 강사레슨은 숨김·직접 링크 차단, 최신 재고 보존 및 10/26 22:00 일회 예약을 확인했으며 실제 오픈은 시각 도래 후 별도 검증합니다. 이번 변경은 AGENTS 지침·이 CORE 규칙 한 부분과 기존 예약 지침만 반영하며 상품·회원·메시지·Functions·주기 작업을 추가 변경하지 않습니다. 적용일은 2026.10.26이며 남은 조치는 승인된 시각의 실제 오픈 확인입니다.
강사레슨 영상 완료 안내 · 2026.10.26목적은 신청한 팀별 복습 영상 업로드·홈페이지 이용 안내입니다. #9 외부피드백2 문자 대상은 사용자 승인된 결석자 포함 A·B·C·D 등록 팀원 전체20명이며 시청권 확대 승인은 아닙니다. 사용자가 기존 내일11시 예약 대신 지금 발송을 요청해 자동화2를 먼저 일시정지했습니다. 기존 문안·수신자·발신번호·채널 독립 목적키는 보존하고 이전 동결 원장·새 시간 변경 승인을 비공개 영수증으로 기록했습니다. 당일09:00~23:00 가드와 StudioMate8개 실제 수업의 최신 등록·취소 상태, 팀별2수업 명단 일치, 제공자 차단·기발송을 재검증했습니다. 2026-10-26 09:10 KST LMS20건 접수, 이후 신규전송0건인 독립 재조회로 전원4000 전달 완료를 확인했습니다. 한시적 조회429는 전송 의도0건 상태에서 중단했고 공식 요청 간격과 제공자 대기시간을 준수하는 제한적 GET 재조회로 해결했습니다. POST·PUT 및 접수/불명 발송은 재시도하지 않습니다. 메타데이터 없는 이력은 원래 POST의 messageId·groupId와 수신자·발신자·형식·본문이 모두 맞아야 전달 근거로 쓰며 과거 미확인 이력으로 신뢰 영수증을 만들지 않습니다. 원천은 native 수업 및 owner-only 발송 원장이고 CRM 미러·수강권·환불·예약 변경의 입력으로 쓰지 않습니다. 기존 가입·권한 점검과 최초 독립 확인 부여부터960시간은 불변입니다. 구현은 Mac mini scripts/send-lesson-video-notice-261027.mjs이며 파일명 날짜와 달리 승인된 실제 실행일은10/26입니다. 이후 강사레슨 업로드는 처리·의도한 공개범위·실제 재생과 기존 홈페이지 강의실 연결 상태를 확인한 뒤 이 채팅에서 수업·날짜·팀·최신 등록 대상 인원·가입 및 권한 미확인 사항·승인 문안과 버튼을 제시하고 강사들에게 알림톡을 보낼지 먼저 묻습니다. 업로드 요청·템플릿 검수 승인·무응답은 발송 승인이 아니며 해당 대상·문안의 명시적 승인 전에는 보내지 않습니다. 거절·무응답은 미발송으로 유지하고 중요한 대상·문안 변경은 다시 승인받습니다. 승인 후에도 결석 포함 최신 등록 명단과 취소·환불·본인 확인, 정확한 APPROVED 양식·채널·이미지·버튼, 실제 KST09:00~23:00와 채널 독립 발송 이력을 재검증합니다. 업로드·강의실 권한·발송 승인·공급자 접수·최종 전달을 구분하고 기존 최초40일·원장·목적키는 보존합니다. 새 업로드 감지기·주기 발송·운영자에게 보내는 알림톡 승인요청은 만들지 않습니다. 향후 알림톡은 공식 빨간 심벌·내 강의실·회원가입 버튼을 갖춘 강사레슨_수업영상 업로드 완료 v1를 정확한 내용·채널·이미지와 APPROVED 확인 후 사용합니다. 2026-10-26 12:15 KST 검수 승인과 19:49 SOLAPI APPROVED·정확한 내용·채널·이미지형·버튼 일치를 확인했으며 이번 전달된 문자는 알림톡으로 중복 전송하지 않습니다. 무발송 회귀와 실제 전송·독립 전달을 구분해 검증했고 이 기록만 양쪽 CORE Hosting에 반영합니다. 회원 권한·상품·영상·다른 자동화·Functions는 변경하지 않았습니다. 이번 문자와 템플릿 검수는 완료됐습니다. 새 발송은 없으며 공통·프로젝트 지침과 이 항목에 기본 절차를 반영합니다. 다음은 차기 업로드 완료 후 대상·문안 제시 및 운영자 승인입니다.
10/25 C·D팀 수강생 영상 · 2026.10.27 verified목적: C·D팀 등록자의 복습 권한과 최초 40일 만료를 관리합니다. implemented: 같은 팀 두 수업의 등록자 전원(출석·결석)을 포함하며 원래 출결을 보존합니다. 취소·환불·알 수 없는 상태·명단 불일치·중복 계정은 자동 처리하지 않습니다. 정본은 StudioMate C97134107·97134122, D97177137·97177166의 현재 전체 등록 명단, 아임웹 전체 회원·상세·팀 그룹과 비공개 student-share 원장입니다. verified·2026-10-27: C5명·D5명의 권한을 회원 상세·독립 그룹 명단·원장으로 확인했습니다. C 결석1명의 기존 수동 부여와 확정된 최초·만료 시각은 유지했습니다. D 지정2계정은 고정 식별 해시·원천·CLI-only 승인 범위에서 오늘의 두 실제 수업 전체 등록 명단과 전체 회원을 재검증하고 기존 정상 CLI로 최초 부여했습니다. 신규 영수증은 both_sessions_registered·registered-including-absentees-v1과 수업별 실제 출결을 보존합니다. 별도 관리자 화면 우회는 하지 않았습니다. D 신규2건은 2026-10-27 10:37 KST 최초 독립 확인부터 정확히960시간인 2026-12-06 10:37 KST경 만료하며 각 정확한 시각은 비공개 원장에 보존합니다. 기존 최초 시각은 재점검·가입·그룹 재추가로 재시작하지 않습니다. 기존 MEMBER_GROUP_LOCK·팀 run.lock·dry-run 토큰·의도 선기록·회원 및 그룹 독립 재조회로 기존 그룹·등급·회원 필드를 보존합니다. 한도 차단은 전송 전 대기로 firstGrantNotStarted·grantAttempts를 유지하며 같은 KST 날짜 재시도·한도 조정·자동 우회는 하지 않습니다. intent/result_unknown은 실제 상태·감사 기록을 먼저 대조하고 재전송하지 않습니다. 만료 때 해당 팀 그룹만 제거하고 유효 구매·STAFF·다른 영상은 보존합니다. pending: B팀 별도 본인확인1건과 다섯 팀 각960시간 만료·회수를 기존 e-2 일정으로 계속 점검합니다. 기존 A·B 미가입 안내 승인 범위만 유지하고 현재 가입·등록·취소·환불·정확 본인·발송 이력과 canonicalActionKey를 대조합니다. C·D·E 신규 메시지·전체 재발송은 승인되지 않았으며 이번 회원 발송0건입니다. KST 09:00 이상23:00 미만만 발송합니다. 기존 보호 페이지·강의실·일반회원 재생·교차 팀/로그아웃 차단·320/390/768/1440px 검증을 보존하며 무변경 재검증·테스트 그룹 변경·영상·상품·주문 변경은 없습니다. 이 기존 CORE 단일 운영규칙 항목만 배포하며 실제 배포·해시 검증 영수증은 2026-10-27 후속 보고서로 구분합니다. 최종 갱신2026-10-27; 다음은 기존 일정의 가입·본인확인 후속과 만료 회수입니다.
현재 구현 상태2026.09.19 외부 피드백 A·B팀 수강생 공유 경로 추가 / 판매영상·수강생 공유 분리 집계 유지 / 기존 시청·구매·공유 권한 흐름은 변경하지 않음
아임웹 앱·웹훅 심사중 · 2026.10.22목적은 가입·일괄가입·쇼핑 등급 변경을 원천 재조회 계기로 받는 것입니다. 기존 앱의 회원 읽기·쓰기와 테스트 이벤트 3종을 저장했고 imwebWebhookApi의 인증·전달 구조는 공식 샘플로 검증했습니다. 운영자 승인으로 기존 앱 인증정보를 archive-pilates Secret Manager에 보관했으며 원문은 채팅·Git·로컬 파일에 저장하지 않습니다. 사이트 연결용 imwebOAuthApi는 이 사이트만 허용하고, 운영자 전용 시작 링크·20분 창·브라우저 상태 검증·일회 인증·암호화 토큰 보관·결과 불명 시 중단을 적용합니다. 서비스·콜백 주소 저장 후 심사를 신청했고 재조회한 앱 상태는 심사중입니다. 사이트 접근 동의는 승인 후 운영자가 직접 확인하며 토큰 발급은 연동완료·실제 웹훅 동작의 증거가 아닙니다. 수신은 그림자 단계이며 권한 부여·회수 근거가 아니고 workLanes 원장으로 회원을 선정하거나 기존 알림톡·StudioMate 작업에 직접 연결하지 않습니다. 정본은 아임웹 최신 회원·등급·구매, 승인된 실제 출석과 최초 부여 원장이며 기존 40일·스텝 해제 보호·만료 점검·5분 보정 작업과 CLI 인증을 유지합니다. 임시 진단은 종료하고 추가 문의 메일이나 정기 자동화를 만들지 않습니다. 다음은 심사 승인 후 사이트 동의·테스트 연결·연동완료이며, 실제 이벤트·일반회원 접근 검증 전에는 운영 전환 완료로 안내하지 않습니다.
강사레슨 공유·본인 매칭 · 2026.10.29목적은 강사레슨 팀별 복습 영상 권한을 등록 팀원 모두에게 제공하고 최초 부여 기간과 기존 권한을 보존하는 것입니다. 운영자 승인에 따라 신규 판정 기준은 실제 출석자만이 아니라 같은 팀 두 수업의 등록 명단에 확인된 출석·결석 전원입니다. 결석을 출석으로 고치거나 출석 원본을 덮어쓰지 않습니다. 취소·환불·등록 명단 불일치·알 수 없는 상태는 제외 또는 확인필요이며, 이름·정규화 휴대폰 번호가 일치하는 유일한 현재 홈페이지 계정만 자동 연결합니다. 운영자가 동일인과 지속 연결을 명시적으로 확인한 한 계정은 owner-only 승인 인덱스와 고정 해시로 현재 UID·회원코드·이름 및 수강 원천의 전체 휴대폰 번호를 대조합니다. 홈페이지 연락처가 비어 있는 경우만 이 제한된 본인 확인을 사용하며 연락처를 수정하지 않습니다. 현재 연락처가 다른 값이거나 동명·같은 번호 복수 계정·식별자 변경은 보류합니다. 본인 연결은 수강 등록·권한·발송 승인을 대신하지 않습니다. 중복 계정·다른 팀·이름만 일치는 보류하고 기존 D팀 두 계정의 제한된 본인 확인·CLI-only 경로를 넓히지 않습니다. 적용 원천은 E261017·A261024·B261024·C261025·D261025 및 이후 동일 방식으로 승인된 강사레슨이며 과거 수업별 출석자 한정 문구는 당시 기록이지 신규 대상 기준이 아닙니다. 정본은 StudioMate 실제 수업 등록 목록과 원래 출석 상태, 아임웹 현재 회원·그룹·유효 구매, 비공개 최초 부여 원장입니다. 신규 증거는 registered-including-absentees-v1과 both_sessions_registered, 수업별 실제 출석 상태를 보존하고 과거 both_sessions_attended 영수증은 변경하지 않습니다. 회원·영상 묶음 최초 부여 독립 확인부터 40일(960시간)이며 수업일·가입일·첫 재생일로 시작하거나 재점검·재가입·재추가로 연장하지 않습니다. 이미 수동으로 부여된 권한은 제거·재추가하지 않고 최초 시각이 없으면 새 시계를 추정해 만들지 않습니다. 운영자가 수동 부여와 시작 시각을 직접 확정한 건만 현재 회원·그룹 독립 재조회와 등록 증거를 묶어 만료 원장을 연결하며 실제 그룹은 재추가하지 않습니다. 기존 최초 시각이 있으면 운영자 확인으로도 재시작하지 않습니다. 기존 구매·다른 영상·등급·할인은 보존합니다. STAFF 해제는 유효 구매와 미만료 공유권을 보호하고 스텝 작업이 추가한 나머지만 회수하며 E팀의 기존 STAFF 특례 제한도 유지합니다. 원장 누락·충돌·결과 불명은 자동 회수·재쓰기를 보류합니다. 구현은 Mac mini imweb-student-share-policy, 승인 본인 매칭 처리기, grant-lesson-261024·261025 및 e261017-access이며 공용 잠금·dry-run·실행 직전 재조회·의도 기록·회원과 그룹 독립 검증을 유지합니다. 새 스케줄러 없이 기존 가입·권한 점검 e-2에서 등록 명단과 상태를 갱신하며 메시지 승인 범위·중복 방지·09:00~23:00 발송 창은 불변입니다. 검증(verified·2026.10.29): 등록/혼합 출결·취소·중복·40일·STAFF 해제·기존 시각 보존을 무발송 회귀 검증했습니다. 운영자가 확정한 B261024 한 계정의 누락 그룹 한 개를 추가하고 기존 다섯 그룹·회원 필드 보존을 회원 상세와 그룹 명단으로 독립 확인했습니다. 최초 2026.10.29 15:27:21 KST부터 2026.12.08 15:27:21 KST까지 960시간이며 정확한 시각은 비공개 원장에 보존합니다. 과거 B팀 본인확인 대기 문구는 이 확정·복구 기록으로 해소되며 다른 미확인 건은 그대로입니다. Mac mini 정본과 canonical CORE 단일 규칙만 반영합니다. Functions·상품·주문·영상·다른 기능은 변경하지 않습니다. 승인 인덱스의 개인정보는 Git·메일·자동화 프롬프트에 저장하지 않고 비공개 로컬 파일에서만 읽습니다. 기존 가입·권한 점검의 일정은 바꾸지 않고 동일한 처리기를 사용합니다. 다음은 기존 점검의 최신 등록 명단 재대조이며 수동 최초 부여 증거가 없는 다른 건은 계속 보류합니다.
10/24 A·B팀 수강생 영상 · 2026.10.26최신 대상 기준·2026-10-26: 이후 영상 권한은 같은 팀 두 수업에 등록된 출석·결석 전원을 포함합니다. 취소·환불·등록 불명·계정 중복은 계속 보류하고 원래 출석 상태는 변경하지 않습니다. 아래 최초 작업의 출석자 한정·결석 제외·당시 인원은 과거 처리 기록이며 신규 판정 기준으로 사용하지 않습니다. 기존 수동 부여와 최초 40일 시각·다른 권한은 유지합니다. 당시 진행 기록: 목적은 외부 피드백2 출석자 각 5명에게 민진 바렐·은영 리포머 복습 영상 2편씩 제공하는 것입니다. 정본은 StudioMate 97134106·97134121(A), 97177049·97177091(B)의 실제 출석과 아임웹 최신 이름·정규화 전화번호 동시 일치 계정입니다. 4편 원본 해시 보존·일부공개 업로드 및 팀별 숨김·검색 차단 보호 페이지 게시를 확인했습니다. 일반 테스트 계정으로 A·B 각 두 영상 실제 재생, 320·390·768·1440px 새 접속 화면, 교차 팀·무권한·로그아웃 차단을 검증하고 임시 그룹을 원복했습니다. 2026-10-25 오후 실제 출석을 재대조하고 운영자의 계속 진행 요청에 따라 남은 A팀 2명·B팀 3명만 별도 관리자 화면에서 팀 그룹을 추가했습니다. 2026-10-26 기존 안내 후 가입한 B팀 1명은 별도 채팅의 명시적 단건 승인으로 권한을 부여했고 회원 상세·그룹 명단과 최초 확인 시각을 재조회했습니다. 현재 정확 일치 9명(A 5명·B 4명)은 회원 상세와 그룹 명단 독립 재조회 및 개인별 최초 960시간 원장 등록을 마쳤습니다. 기존 3명의 최초 시각·등급·기존 모든 그룹은 유지했고 당시 신규 5명은 각 확인 시점부터 시작하며 이후 B팀 1명의 시계도 실제 최초 독립 확인부터 정확히960시간입니다. CLI 한도·인증·감사 원장은 변경하지 않았으며 같은 안전한도를 반복 호출하지 않았습니다. 2026-10-25 10:42 KST 미가입 1명에게 승인된 가입 안내 LMS 1건을 기존 문자 계정·발신번호로 한 번 발송했고, 공급자 원본 4000으로 최종 전달을 독립 확인했습니다. 안내는 영상 직접 주소 없이 홈페이지 가입과 내 강의실 이용을 설명하며 발송 원장의 고정 키와 공급자 영수증으로 재발송을 차단합니다. 연락처 없는 동명 계정 1명은 본인 확인 보류이며 E팀 채널 미선택 안내의 미승인 상태는 유지합니다. 이후 별도 승인된 가입 안내만 09:00~23:00 내 현재 가입·실제 출석·취소·기발송을 재대조합니다. 공통 자동 판정 원천은 이 항목부터 E261017·A261024·B261024로 확장하며 E팀 기존 5명의 최초 시각은 보존합니다. STAFF가 이미 가진 그룹은 제거·재추가하지 않고 실제 두 수업 출석 및 동일 그룹·등급 독립 재조회로 수강생의 별도 최초 공유권을 기록합니다. 스텝 해제 시 미만료 공유권과 유효 구매를 보존하고 기간을 연장하지 않습니다. 기존 e-2의 하루 3회 점검에 가입 후속·전용 그룹 만료·승인된 일회성 문자 대기를 합치며 새 주기 작업은 만들지 않습니다. 모든 등록 원천의 후속·만료 처리가 끝나기 전에는 E팀 완료만으로 종료하지 않습니다. API/그룹 쓰기는 공유 잠금·dry-run·실행 직전 전체 계정 중복 대조·그룹 보존·의도 원장·독립 재조회를 사용합니다. 명시적인 로컬 한도 차단은 전송 전 대기로 기록하고 최초 40일을 시작하지 않으며 결과 불명과 구분합니다. 구현 소스는 Mac mini 정본, 신규 강의실 항목 2개와 이 운영규칙만 반영 대상으로 삼고 Functions·상품·가격·구매 이력·다른 페이지·기존 주기는 변경하지 않습니다. 내 강의실 신규 항목 일반회원 발견 검증과 한국어 자막 전수 원음 검수는 별도 미완료이며 보고서에서 배포 영수증·검증 범위를 구분합니다. 가입 안내를 받았던 1명의 가입·권한 후속은 완료됐으며 남은 대상은 연락처 없는 동명 계정 1명의 본인 확인입니다. 같은 KST 날짜의 확인된 CLI 한도 차단은 새 전송 없이 보존하고 기존5개 원장의 가입 후속·만료만 계속 점검합니다. 이미 전달 완료된 가입 안내는 재발송하지 않습니다.
E팀 수강생 영상 · 2026.10.18목적은 10/17 E팀 출석자의 두 영상 복습 제공입니다. 정본은 StudioMate 수업 97134045·97134052 실제 출석이며 홈페이지 이름·정규화 전화번호가 함께 정확히 일치한 계정만 대상입니다. 가입 5명 전원 전용 그룹 저장·독립 재조회 완료, 미확인 0명이며 기존 구매·다른 그룹은 보존합니다. 운영자 승인 정책은 개인별 최초 권한 부여 확인 시각부터 40일(960시간)입니다. 5명 모두 원장 최초 부여 증거를 사용하며 재점검·재가입·그룹 재추가로 기간을 연장하지 않습니다. 만료 후 다음 점검에서 g2026101715ef28611dff4만 제거하고 회원 상세·그룹 명단을 재조회합니다. 구매권한·다른 팀·STAFF·관리자·등급·적립금은 변경하지 않습니다. 실행 정본은 전용 state.json의 accessPolicy·entitlements와 아임웹 최신 회원·그룹이며 scripts/e261017-access.mjs가 공유 run.lock, dry-run 확인, 변경 전 재조회, 의도·결과 분리와 불명 결과 재쓰기 금지를 적용합니다. e-2는 매일 10:30·14:30·18:30 가입·만료를 점검하며 전원 가입만으로 종료하지 않고 전원 처리 및 만료 회수 확인 후 종료합니다. 미가입 7일 무변동은 한 번만 보고합니다. 구현은 40일 계산·전용 그룹 회수 가드와 오프라인 회귀 검증, 5명 기간 등록·최신 그룹 재조회이며 실제 만료 회수는 기한 도래 후 검증합니다. E팀 페이지·내 강의실 E261017 및 일반회원 모바일·PC 두 영상 접근·재생·무권한 차단은 이전 검증 완료 기록을 유지합니다. YouTube 일부공개·기존 영상과 구매 이력은 보존합니다. 안내 채널 미선택 보류는 별개이며 반복 발송하지 않습니다. 이번 배포는 이 CORE 규칙 한 부분만 대상입니다. 2026.10.21 점검에서 별도 작업으로 부여된 다섯 번째 권한을 포함해 출석자 5명의 가입·전용 그룹·최초 40일 기간을 대조했습니다. 마지막 권한의 최초 확인은 2026.10.20 20:21:24.062 KST, 만료는 2026.11.29 20:21:24.062 KST이며 기존 4명 최초 시각은 유지합니다. 현재 만료 회수 대상은 없습니다. 별도 승인된 STAFF 계정은 수강생 40일 원장에 편입하지 않습니다. 다음 조치는 개인별 만료 후 실제 회수 검증이며 전원 가입만으로 자동화를 종료하지 않습니다.
공통 STAFF 영상 접근 · 완료 가드 · 2026.10.29목적은 스텝 등급과 현재·신규 영상 접근의 누락 없는 연결입니다. 정본은 아임웹 최신 회원 grade·영상 그룹·보호 페이지 native ACL·유효 구매와 비공개 최초 부여 및 imweb-staff-video/state.json 원장입니다. ARCHIVE STAFF 그룹만으로 스텝을 판정하지 않습니다. 운영 원칙: common_staff_group_v1은 모든 보호 페이지와 새 페이지의 원래 구매자·수강생 그룹 OR ARCHIVE STAFF를 native 그룹 권한으로 허용합니다. 기존 권한을 STAFF 전용·공개 접근·화면 숨김으로 대체하지 않으며 native ACL과 일반 계정 검증 전 활성화하지 않습니다. 로컬 구현(implemented): 공통 모드는 STAFF만 추가하고 영상별 개별 할당과 48개 영상 제한을 사용하지 않습니다. 카탈로그 원천 상한 1000개와 회원별 native 50개 그룹 상한은 별개이며 후자는 유지합니다. 기존 모드는 영상별 할당·48개 제한을 유지합니다. sync 쓰기 전과 독립 verifier에서 native ACL을 각각 재조회하며 공통 모드 필수 그룹 명단은 STAFF만 검증합니다. STAFF 명단의 모든 행은 현재 회원 원본의 스텝 등급과 추적 원장에 일치해야 하며 일반회원·미추적 권한이 남으면 수동 확인 실패로 처리합니다. 기존 회원 그룹·baselineGroups·ownedAddedGroups 분류와 최초 40일 시각은 보존하고 이전 그룹을 일괄 제거하지 않습니다. 공통 모드 활성 스텝의 sync 성공 때 commonStaffGroupManaged=true만 추가 기록합니다. 이후 스텝 해제는 최신 구매·미만료 공유권을 보호한 뒤 작업 소유 그룹을 회수하며, 이 플래그가 정확히 true인 경우에만 STAFF 역할을 baseline 예외로 해제합니다. STAFF를 owned 배열로 옮기거나 원래 baseline을 덮지 않고 다른 개인 영상 baseline은 전부 유지합니다. STAFF 자체에 구매·수강생 보호권이 있으면 자동 회수하지 않고 수동 확인으로 중단합니다. 관리 이전 플래그가 없거나 기존 모드이면 baseline 보존은 그대로입니다. 처리·실제 재생·보호 페이지·내 강의실 연결 증거와 complete-imweb-video-access 완료 가드, 회원 상세·그룹 명단 독립 확인을 모두 통과하기 전에는 전체 접근·업로드 완료로 표시하지 않습니다. 검증(verified·메인 최종 실검증 전달 결과): 보호 페이지 49개 모두 원래 ACL 보존과 다른 메뉴 메타데이터 불변을 native API로 확인했습니다. 일반 STAFF-only 테스트 계정은 49개 카드 모두 source=fetch, failures=0이며 320·390·768·1440px 전부 scrollWidth=innerWidth입니다. STAFF-only AR7은 실제 23.804초 재생 중·readyState=4·오류 없음, ACA5는 iframe 접근 성공입니다. BUYER-only AR7은 실제 3.743초 재생 중·오류 없음이며 일반 무권한·로그아웃 접근 차단도 통과했습니다. 테스트 계정은 native API에서 group=[] 및 전체 메타데이터 보존을 확인해 원복 완료했고 원복 미확인 위험은 해소됐습니다. 상세 matrix는 비공개 원장에 저장합니다. 운영 반영·실행 검증 완료(메인 전달 증거): 맥미니 clean main 7111ac71 런타임 fast-forward와 비공개 common config 활성화 후 runStaffVideoSync 실제 apply가 통과했습니다. 스텝 2명·카탈로그 48개·보호 페이지 49개와 STAFF 명단 1회 조회의 독립 검증을 완료했습니다. 원본 그룹 추가 0·삭제 0이며 baselineGroups·ownedAddedGroups 원래 분류를 보존하고 공통 STAFF 역할 관리 플래그를 기록했습니다. CORE Hosting 게시 여부는 이 문서의 실제 라이브 hash와 최종 report로 확정하며 처리기 운영 반영과 구분합니다. 기존 5분 실행기·업로드 완료 단계의 동일 runStaffVideoSync 처리기·회원그룹 잠금은 불변이고 새 폴러·스케줄러를 만들지 않습니다. 가입·등급 웹훅은 shadow이며 사이트 연동·정본 큐 승격 검증 전 권한 실행에 사용하지 않습니다. pending·결과 불명은 자동 재쓰기하지 않고 정확한 회원·해시·변경 전 그룹·메타데이터를 대조한 승인 복구만 허용합니다. 확인된 로컬 CLI 한도는 blocked_before_dispatch·관리자 후속 대기로 보존하고 반복 쓰지 않습니다. 안내 발송은 별도 승인 전까지 보류하며 관리자 권한·상품·가격·주문은 변경하지 않습니다. 잠금 대기·오류는 기존 중복 방지 관제를 유지하고 전체 독립 검증 후에만 전체 성공 시각을 갱신합니다. 다음 영상도 원래 구매자·수강생 그룹 OR STAFF와 완료 가드를 확인하며, shadow 웹훅은 별도 동의 전 미활성으로 유지합니다.

3. 재등록 관리

회원이 끊기기 전에 운영자가 확인할 재등록 후보를 관리합니다.

operator action

관리 목적

  • 재등록 관리는 기존 잔여횟수·기간만료 알림톡 자동발송과 운영자 상담을 함께 관리하는 세션입니다.
  • 알림톡은 승인된 기존 템플릿과 30일 중복 차단을 유지하고, 개인화 계산값은 대상 검토와 상담 추천에만 사용합니다.
  • 홈 미해결 액션에는 오늘 바로 확인해야 하는 긴급 후보만 더합니다.
  • 30일 내 관리 후보는 홈 재등록 관리 섹션에 별도로 표시하고, 실패나 오류로 누적하지 않습니다.

후보 산정

  • 기본 원천은 memberProfiles.activeTickets입니다. member360Cards.currentTicketsSummary는 매출·상세 검토용 미러로만 사용하며, 최신 memberProfiles와 다르면 CORE 화면은 memberProfiles 값을 우선 표시합니다.
  • 수강권 만료 30일 이내, 잔여 횟수 부족, 최근 방문 후 활성 수강권 공백 회원을 후보로 봅니다.
  • 최근 8주 출석·결석·당일취소의 실제 소진 속도를 계산해 예상 소진일이 30일 이내인 회원도 관리 후보로 봅니다.
  • 그룹은 잔여 5회 이하, 프라이빗과 듀엣은 잔여 3회 이하를 기본 임계값으로 사용합니다.
  • 7일 이내 만료·예상 소진 또는 매우 낮은 잔여 횟수는 오늘 확인 후보로 올립니다.

제외와 중복 방지

  • 상담, 체험, 강사레슨, 스텝·강사 교육용, 직원용, 락커, 양말, 상품권·쿠폰·보상권처럼 재등록 상담 대상이 아닌 수강권은 제외합니다.
  • 같은 유형의 정상 후속 수강권을 이미 보유한 회원은 만료·부족 알림톡 대상에서 제외합니다. 수강권 ID가 없거나 상품명이 같아도 별도 보유 행이면 재등록 후속권으로 판정하되, 보상 쿠폰·상품권과 잔여횟수·만료일이 모두 없는 불완전 행은 후속권으로 사용하지 않습니다.
  • 전화번호가 없는 후보는 외부 발송 원천으로 쓰지 않고, 운영자 화면에서만 보조 확인 대상으로 봅니다.
  • 재등록 알림톡은 후보 생성 때와 실제 발송 직전에 같은 제외 규칙, 정상 후속 수강권, 수강권 canonical key, 중복발송 여부를 다시 확인합니다.
  • 같은 회원이 최근 14일 안에 잔여횟수·만료·재등록 안내를 받았다면 장기 미출석 안내를 발송하지 않습니다. 같은 날 겹치면 재등록 안내 1건만 발송하고, 같은 수강권이 잔여횟수와 만료일 조건에 동시에 해당해도 우선순위가 높은 안내 1건만 발송합니다.
  • 장기 미출석 안내는 현재 수강 주기 안의 출석만 사용합니다. 새 수강권 시작 후 아직 출석하지 않았거나 향후 예약·대기 신청이 있으면 제외하며, 실제 발송 직전에 같은 원천을 다시 확인합니다.
  • 같은 회원·수강유형의 renewalCases 장부는 하나만 유지하며, 후속 수강권이 확인되면 기존 건은 자동 완료 처리하고 CORE 새로고침에서도 즉시 제외합니다.
  • 재등록 장부 갱신은 일일 알림톡 후보 처리보다 먼저 수행하며, 예약 원천은 후보 판정에 필요한 필드만 읽어 메모리 중단을 방지합니다.

운영 단계

  • 오늘 확인: 만료 또는 잔여가 임박해 당일 현장 상담·전화가 필요한 상태입니다.
  • 이번 주 상담: 곧 만료되거나 잔여가 낮아 수업 전후 안내하면 좋은 상태입니다.
  • 만료 전 관리: 30일 안에 미리 안내하면 이탈을 줄일 수 있는 상태입니다.
  • 재등록 대기: 최근 방문 이력이 있지만 현재 활성 수강권이 없어 복귀 상담 대상입니다.
  • 운영자는 연락완료, 고민중, 7일 후 재확인, 재등록완료, 재등록 의사 없음 상태를 기록합니다.
  • 재등록완료는 실제 재등록이 확인된 건, 재등록 의사 없음은 회원이 재등록하지 않겠다고 확인한 건에만 사용하며 두 상태 모두 현재 목록에서 숨기고 이력은 유지합니다.
현재 확인 위치CORE Home > 재등록 관리 / 원천 memberProfiles + canonical bookings / 운영상태 renewalCases

4. 카카오 알림톡

대상자 선정, 승인, 발송, 로그를 분리해 오발송을 막습니다.

external send

발송 흐름

  1. Excel 동기화가 회원, 수강권, 예약 상태를 갱신합니다.
  2. Firebase가 canonical source 기준으로 후보를 만듭니다.
  3. SOLAPI 템플릿 승인 상태와 변수 매칭을 확인합니다.
  4. 자동 기준 또는 운영자 승인 후 queued로 전환합니다.
  5. SOLAPI 발송 결과를 alimtalkSends와 로그 문서, 메일로 남깁니다.

자동 발송 기준

  • 일일 정기 발송 기준 시각은 11:30입니다.
  • 월요일 예약오픈 안내는 12:30에 스튜디오메이트 예약 안내 v4로 발송하며, 동일 예약주차 기준 6일 동안 중복 발송하지 않습니다.
  • 예약오픈 대량 발송 승인은 같은 날의 일일 알림톡 승인과 별도 승인 건으로 관리합니다.
  • 대량 발송 가능 후보가 10건 이상이면 자동 발송하지 않고 승인 게이트로 보냅니다.
  • 발송 전 중복, 제외 회원, 템플릿 승인, 전화번호를 다시 확인합니다.
  • 2026.10.16 공통 대상 검증: 기존 Firestore 후보 ID 1~10건만 조회합니다. CORE 알림톡의 대상 검증과 MCP messages_validate_target은 같은 사전검증 서비스를 사용하며 운영자만 접근합니다. 새로운 종합 DB·후보 재계산·스케줄러·발송 경로는 만들지 않습니다.
  • 검증 조회는 후보·발송·회원 원장과 기존 제외·원본·중복 정책을 읽기만 합니다. 템플릿 저장 상태가 10분을 넘었거나 확인할 수 없으면 검토 필요이며, SOLAPI 갱신·후보 수정·승인·큐 실행·재발송을 하지 않습니다. 조회시각은 StudioMate 실시간 확인시각이 아닙니다.
  • 사전검증 통과는 발송 허가가 아닙니다. 실제 발송은 기존 단일 큐 또는 강사레슨 승인 전용 실행기에서 승인·선점·현재 원본·보고서 revision을 다시 확인합니다. 홀딩·계약완료 웰컴·강사레슨·리포트 등 전용 최종 확인이 필요한 건은 검토 필요로 구분합니다. 기존 주기·대상 선정·중복 기간·테스트 예외는 유지합니다.
  • 공통 검증 운영 상태: 알림톡 Functions와 맥미니 MCP 연결을 반영하고, 운영자 라이브 조회·비로그인 차단·후보 및 발송 원장 무변경을 확인했습니다. CORE는 같은 검증 API를 사용합니다. 실제 알림톡 추가 발송·재발송은 하지 않았습니다. 다음 작업은 11:30 전체 후보 준비의 별도 메모리 개선이며 이번 범위와 구분합니다.
  • 예약오픈·설문·재등록·장기 미출석 같은 일반 회원 자동 알림은 후보 생성과 발송 직전에 현재 memberProfiles 등급과 active staffs 연락처를 함께 확인해 근무 스텝을 제외합니다. 운영자 단건 발송과 강사레슨 업무 알림은 별도 규칙을 유지합니다.
  • 당일만 유효한 자동 후보가 발송되지 않은 채 기준일을 넘기면 stale_source_date로 종료하며 다음 자동 실행 대상에 다시 포함하지 않습니다.
  • 운영자 화면의 일반 회원 태그에는 알림톡 상태 태그를 표시하지 않습니다.

제외 규칙

  • 같은 수업 유형의 정상 후속 수강권을 보유한 회원은 수강권 만료·부족 알림에서 제외합니다.
  • 스텝·강사 교육용 수강권과 양말, 토삭스, 상품권, 쿠폰, 보상권, 기간연장 등 재등록 대상이 아닌 상품은 제외합니다.
  • 전화번호 없음, 상담고객, 템플릿 미승인, 구 템플릿 코드는 발송하지 않습니다.
  • 취소되거나 stale인 예약은 프라이빗/그룹 설문 알림 발송 직전에 다시 제외합니다.
  • 야외 그룹수업 제외의 정본은 연결된 bookings의 ticketName·ticketClassType·ticketType입니다. 각 문자열을 NFKC 정규화하고 공백·영문 대소문자를 정리해 야외 또는 outdoor가 포함되면 해당 예약의 그룹 첫 수업 설문 후보를 만들지 않으며, 기존 후보도 발송 직전에 현재 예약 원본으로 다시 차단합니다. 명시적 테스트 수신자 예외도 이 제외를 우회하지 않습니다.
  • 야외 예약의 과거 출석은 일반 그룹 첫 수업 여부를 판단하는 출석 이력에서 제외합니다. 미제출 야외 설문 요청의 조회(GET)·제출(POST), 미제출 확인 메일, 담당강사 설문 전달과 새 설문 메모 출력을 차단합니다. 이미 제출된 응답·기존 메모·발송 선점과 이력은 보존하며 삭제·초기화·실발송·재큐잉하지 않습니다.
  • 야외·일반 수강권을 함께 가진 회원 전체를 제외하지 않고 예약별로 판단합니다. 무료·1회성·체험 수강권의 기존 판정과 프라이빗·강사레슨의 기존 규칙, 제출 이력·중복 방지는 변경하지 않습니다.
  • 프라이빗 사전설문은 예약 상태가 유효하더라도 수업 시작 시각이 지난 뒤에는 발송하지 않습니다.
  • 김기효 테스트 수신자 예외는 운영자가 직접 승인한 테스트 발송에만 적용합니다. 일일·주간 자동 후보에서는 다른 스텝과 동일하게 제외합니다.
야외 그룹 설문 제외 · 2026-10-26목적: 야외수업의 불필요한 설문·후속 알림 방지. 정본: 연결 bookings와 기존 요청·응답·발송·메모 원장. 위 설문 경로를 구현하고 무발송 통합 318건·5개 코드베이스 빌드·반응형 95건을 검증했습니다. 관련 Functions 3개 코드베이스의 51개 함수 ACTIVE 갱신을 확인했으며 앱·소셜 54개는 유지했습니다. CORE 규칙·카탈로그는 이 기록이 포함된 Hosting 릴리스부터 적용하며 최종 라이브 증거는 2026-10-26-outdoor-group-survey-exclusion 보고서를 따릅니다. 저장 원천 조회는 StudioMate 실시간·회원 전달 증거가 아닙니다. 다음: 기존 주기대로 처리하며 별도 큐 실행·재발송·기존 답변 삭제는 하지 않습니다. 갱신: 2026-10-26.

중복 방지

  • 수강권 알림은 회원, 템플릿, 수강권 식별자 기준으로 막습니다.
  • 기간형 중복 차단은 같은 dedupeKey의 전체 성공 이력 중 가장 최근 발송 시각을 확인하며, 오래된 첫 이력 1건만으로 판단하지 않습니다.
  • 프라이빗 최초 사전설문은 회원별 영구 1회입니다. 그룹 첫 수업 설문은 같은 유형 제출 후 1년이 지나야 재후보가 됩니다.
  • 수업자료와 회원 리포트는 같은 회원·수업·recordId 단위로 영구 1회만 발송합니다.
  • 회원 리포트는 승인한 revision과 후보 ID를 고정해 수정본과 발송본이 섞이지 않게 합니다.
  • 회원관리 알림은 최근 14일 동안 양방향으로 확인합니다. 장기 미출석 전후의 재등록 알림은 같은 회원 기준으로 막고, 잔여횟수·만료 알림은 동일 renewalCaseId 기준으로 1건만 허용합니다. 같은 날 겹치면 재등록 안내를 우선합니다.

템플릿과 링크

  • 템플릿별 대상/제외 규칙은 templateTargetRules.ts에서 관리합니다.
  • 일일 SOLAPI 템플릿 동기화는 코드에서 운영 승인 상태인 템플릿만 확인합니다. pending·deleted·미사용 템플릿은 운영 실패 경고에서 제외합니다.
  • 매일 10:15에 전일 SOLAPI 알림톡 목록과 Firestore alimtalkSends 성공 원장을 메시지 ID로 대조합니다. 일치하면 조용히 기록하고, SOLAPI에만 있는 발송이나 조회 실패가 있을 때만 운영 메일을 보냅니다.
  • SOLAPI 버튼 URL은 변수 치환 후 100자 이하여야 합니다.
  • 강사레슨 수업자료 안내는 수업자료 보기, 수업배정 안내, 방문안내 보기, 주차 사전등록 버튼을 함께 검수합니다.
  • 강사레슨 수업자료 발송은 승인된 강사레슨 수업자료 안내 v3 템플릿만 사용합니다. 승인 후보가 V3가 아니면 차단하며, v1은 삭제됐고 v2는 과거 발송 이력 식별에만 사용합니다.
  • 강사레슨 D-1 수업자료 안내에만 샘플 승인 절차를 적용합니다. 다른 알림톡의 자동 발송 및 기존 승인 규칙에는 적용하지 않습니다.
  • 강사레슨 D-1 대상은 개별 예약 문서의 수정시각이 아니라 수업일을 포함하는 최신 StudioMate 전체 예약 스냅샷과 현재 예약 상태로 검증합니다.
  • D-1 11:30에 실제 본 발송과 같은 템플릿, 문구, 날짜별 관리번호, 버튼 4개로 지정된 스텝 테스트 수신자에게 샘플 1건을 먼저 발송합니다.
  • 샘플의 SOLAPI 성공 기록과 사용자의 명시적 승인이 모두 확인된 뒤에만 D-1 18:00 본 발송 대상으로 전환합니다. 샘플 수신 성공만으로 승인 처리하지 않으며, 승인되지 않으면 본 발송하지 않습니다.
  • 승인 링크를 여는 GET 요청은 확인 화면만 표시하고, 화면 안의 승인 버튼을 누른 POST 요청만 승인으로 기록합니다. D-1 17:30에는 미승인 또는 실패 상태를 다시 확인해 긴급 메일을 보냅니다.
  • 본 발송 직전 StudioMate 예약 상태, 취소, 연락처 중복, 기존 발송 이력과 라이브 링크를 다시 확인합니다. 수강생 수와 관계없이 같은 승인 규칙을 적용하고 날짜가 다른 수업은 각각 별도 승인합니다.
  • 18:00 본 발송은 승인 묶음의 후보 ID와 수신자를 고정하고 해당 예약·수업·회원 원본만 한 건씩 확인합니다. 전체 회원·예약·수업 재계산과 갱신관리 변경은 하지 않습니다. 승인 뒤 추가된 예약자는 자동 편입하지 않으며 별도 확인·승인이 필요합니다.
  • 후보 누락, 수신자·템플릿·수업일·날짜별 링크 변경 또는 원천 검증 실패 시 본 발송을 보류합니다. 취소 확인은 D-1이 아닌 실제 수업일의 등록 원장을 사용합니다. 일반 큐는 수업자료를 발송하지 않으며 승인 전용 경로는 1회만 시도합니다.
  • 발송 선점 직전에 승인·후보·예약·수업·회원·취소·기존 발송 원장을 트랜잭션으로 재확인합니다. 중간 종료된 sending, processing, failed 상태와 결과 불명확 건은 자동 재시도하지 않고 SOLAPI 원장 대조 후 운영자가 판단합니다.
  • 2026.10.16 메모리 개선: 18시 승인 ID 한정 발송을 Functions에 배포하고 실제 소스·스케줄·원장을 읽기 전용으로 검증했습니다. 512MiB 한도는 유지하며 실제 승인 발송의 개선된 메모리 실측은 다음 정기 실행에서 확인해야 합니다. 원천은 승인·후보·발송 원장과 현재 예약·수업·회원 문서입니다. 11:30 공용 준비의 전체 적재와 과거 후보 전역 정리는 아직 개선 전이며, 이번 변경으로 오늘 중단된 건을 재발송하지 않습니다.
  • 강사레슨 예약확정 안내 v1은 운영자가 CORE에서 입금·수강 접수를 확인한 등록 건에 대해 StudioMate 강사레슨 (2T) 수강권 발급이 검증되면 자동으로 1회 발송합니다. 반배정·예약은 이후 운영자가 StudioMate에서 직접 처리하며 발송 조건으로 사용하지 않습니다.
  • 2026-10-27 명단·좌석과 안내 분리: 결제와 수강 접수 확인이 완료된 CORE 등록은 수강권 발급·확정 안내를 기다리지 않고 일정 명단과 접수 인원에 즉시 포함합니다. 수강권·예약과 같은 수강자는 중복 집계하지 않습니다. 미승인·주문 확인필요·취소·합성 테스트는 신규 접수 좌석에 포함하지 않으며, 이미 발급된 수강권은 기존 정본 기준을 유지합니다. 야간에도 명단은 반영하되 회원 생성·발급·알림톡의 09:00~23:00 규칙은 그대로입니다.
  • 알림톡 후보는 수강권 단계가 verified로 처음 전환될 때만 만들고, 알림톡 큐는 등록 취소 여부, 회원·수강권 발급 증거, 수업일별 관리번호, 캘린더 계약과 기존 성공 발송을 발송 직전 다시 확인합니다.
  • 자동 발송의 운영자 승인은 CORE 등록 시의 입금 확인과 수강 접수 확인으로 고정합니다. 오류 건의 안내 재처리는 기존 성공 이력을 다시 확인하며, 김기효 등 스텝 계정은 별도 실발송 테스트 승인 없이 제외합니다.
  • 예약확정 캘린더 버튼은 실제 수업일이 포함된 영문주제-YYMMDD 관리번호로 날짜별 랜딩 페이지와 .ics를 연결합니다. 발송 전 두 경로의 200 응답과 일정·시간·장소 일치를 확인합니다.
  • 월별 상세 안내는 모집·신청 단계에서만 사용하고 예약확정 알림톡과 캘린더 랜딩 페이지에는 반복 노출하지 않습니다. 방문안내 버튼은 공통 공개 페이지 archivepilates.notion.site/visitin을 사용합니다.
  • ARCHIVE PILATES 공식 방문 주소의 단일 기준은 부산광역시 강서구 명지국제2로28번길 34 에코팰리스 704호입니다. 개인정보처리방침, METHOD, 면접·채용, 캘린더 화면·.ics·Google Calendar, Notion 방문안내 등 외부 안내 원천은 이 문장을 그대로 사용하고 주소 변경 시 함께 갱신·검증합니다.
  • 2026년 9월 외부 피드백은 external-feedback-260919와 external-feedback-260920을 사용합니다. 2026.08.25 랜딩 페이지와 .ics의 Hosting 반영, 200 응답, 캘린더 형식 및 반응형 화면을 확인했고, 2026.08.28 SOLAPI 예약확정 v1의 APPROVED·BA/IMAGE·ARCHIVE 이미지·버튼 계약을 확인했습니다. 같은 날 발송 원천을 예약 두 세션에서 강사레슨 (2T) 수강권 발급 검증으로 변경했습니다.
  • 2026.08.28 수강권 이벤트와 알림톡 큐 Functions의 ACTIVE, 10분 큐 Scheduler의 ENABLED, CORE 라이브 문구와 반응형 화면을 확인했습니다. 배포만으로 생성·변경된 강사레슨 등록 및 예약확정 후보는 0건입니다.
  • 강사레슨 수업배정 안내는 StudioMate 예약 스케줄의 수업일, 시간, 강사, 기구, 예약자 기준으로 만들고 수기 이미지나 임의 명단을 원천으로 쓰지 않습니다.
  • ARCHIVE METHOD 수업자료는 수업 당일 12:00(KST)에 공개하는 것이 기본입니다. 공개 전에는 “수업자료는 수업 당일 12시에 공개됩니다.” 안내만 표시합니다.
  • 수업자료 공개일은 StudioMate 예약 스케줄의 실제 수업일과 관리번호 날짜를 일치시킵니다. 스텝 프리뷰 링크는 공개 시각 전에도 자료를 확인할 수 있습니다.
  • 2026.10.23 #9 큐카드 수정 원칙: 노션 #9 시퀀스와 #8 시리즈 이론을 확인한 뒤 공통 원본 docs/tasks/2026-10-22-method9-content.json을 수정합니다. build:method9-cuecards 한 번으로 24·25일 수업자료, 스태프 프리뷰와 로컬 검토본을 함께 생성하고 validate:method9-generated로 버전 불일치를 차단합니다. 이번 승인 릴리스는 운영 수업자료와 수업배정 페이지를 포함하며 스태프 프리뷰는 별도로 유지합니다. 수업자료는 각 수업일 정오에 공개합니다. 배포 후 내용 버전·양쪽 시퀀스·정오 게이트를 재검증합니다. 자동 노션 감시나 샘플 승인 없는 본 발송은 하지 않습니다. 실제 배포·검증 상태는 배포 보고서로 확인합니다.
  • StudioMate 수업명이 영문 주제를 포함하지 않으면 승인된 수업일-주제 매핑으로 관리번호를 만듭니다. 한 회차가 여러 날 열릴 때는 날짜별 관리번호와 공개 시각을 각각 적용합니다.
  • 2026.10.23 D-1 링크 보강: 10월 24일 A/B팀은 external-feedback-261024, 25일 C/D팀은 external-feedback-261025로 통합합니다. A·B·team만으로 주제를 추정하지 않습니다. 수업자료·배정 안내의 운영 URL 200 응답, 수업일과 정오 안내를 확인하고 샘플을 준비합니다. 전송 전 링크 보류는 blocked_preflight로 구분하고, 발송 원장·공급자 접수 증거가 없을 때만 같은 승인키로 재검증합니다. sample_failed·sample_unknown·전송 선점은 자동 재시도하지 않습니다. 과거 잘못된 관리번호는 원장을 보존하고 별도 대조 후 대체 후보를 연결하며 기존 승인을 재사용하지 않습니다. 원천: StudioMate 예약 스냅샷과 bookings·lectures·memberProfiles, 승인·후보·발송 원장. 처리: 기존 11:30 샘플·18:00 승인 전용 발송이며 새 스케줄러는 만들지 않습니다. 테스트·배포·라이브 검증 결과는 이번 배포 보고서에 기록합니다.
  • 2026.10.23 수업배정 명단 보완: 배정 안내에는 시간표뿐 아니라 StudioMate 현재 예약 반의 명단을 표시합니다. 10월 24·25일은 예약내역 원본 Excel에서 예약 상태만 사용하고 취소를 제외해 A/B·C/D팀 각 5명을 확인했습니다. 같은 팀의 두 세션 명단과 날짜 변경을 대조하며 임의로 반을 재편하지 않습니다. 이번 양일 명단은 운영자의 명시적 공개 승인에 따라 전체 이름만 표시하고 휴대폰·수강권·취소 이력은 공개하지 않습니다. 기존 4버튼 알림톡의 배정 주소를 유지하며 추가 발송 없이 기존 링크에서 확인합니다. 수정 페이지 확인 전 본 발송 승인은 보류합니다. 원천: StudioMate 수업 > 예약내역의 2026-10-24·25 원본 Excel. 대상: METHOD #9 날짜별 assignment 페이지. 배포·원본 일치·모바일 검증 결과는 2026-10-23-method9-assignment-roster 보고서에 기록합니다.
  • 긴 URL은 shortLinks를 만들고 버튼에는 pr-, ir- 같은 짧은 링크 ID를 넣습니다.
  • 발송 직전에는 템플릿 승인 상태, 전화번호, 대상일, 재시도 한도, 설문/가입서/리포트 필수 링크 변수를 다시 확인합니다.
  • 설문ID, 접근토큰, shortLinkId, reportLinkId 같은 필수 링크 변수가 비어 있으면 후보가 생성되어 있어도 queued 또는 sent로 전환하지 않습니다.
  • 삭제된 신규회원 웰컴 v3 템플릿은 후보 재생성 대상에서 제외합니다. 현장 웰컴 v5도 2026-09-14부터 신규 접수·신규 발송을 중단하며, 과거 발송·제출 이력의 후속 확인만 유지합니다.
  • 프라이빗 사전설문은 Google Form이 아니라 ARCHIVE PILATES 자체 설문을 사용합니다.
  • 프라이빗 회원은 프라이빗 사전설문 안내 v2, 제출 내용을 받는 담당강사는 담당강사 사전설문 제출 안내 v2, 하루 기록 강사는 강사용 프라이빗 오늘 기록 안내 v4, 회원 리포트는 프라이빗 회원 리포트 안내 v1만 사용합니다.
  • 구 프라이빗 사전설문 v1과 강사용 차트 v2·v3는 SOLAPI에서 삭제했으며, 과거 발송 기록 식별 외에는 다시 참조하지 않습니다.
  • 회원 작성 링크는 https://in.archivepilates.com/privateSurvey/를 사용하며, Hosting 배포에는 설문 페이지와 privateSurveySubmit API rewrite가 함께 있어야 합니다.
  • 배포 전 롤백 가드와 배포 후 라이브 canary가 설문 페이지 및 제출 API 연결을 필수로 확인합니다.
  • 2026.10.12 설문 화면 보완: 그룹·프라이빗 제출 결과는 긴 URL·답변을 화면 폭 안에서 줄바꿈하고 입력된 개행을 유지합니다. 프라이빗 설문·모바일 강사 퀴즈 선택지는 최소 44px 터치 영역을 사용합니다. 작성 화면과 결과 렌더링을 320·390·768·1440px에서 검증하며 설문 문항·응답·대상·발송 규칙은 변경하지 않습니다.

수강료 문의 응답

  • 수강료 안내 알림톡은 최근 문의한 사람에게 운영자가 전화번호를 입력해 단건으로만 보냅니다.
  • 발송 위치는 CORE 홈탭의 수강료 문의 즉시발송 카드입니다. Messages 탭은 모니터링과 실패 확인용으로 사용합니다.
  • 내부 메모는 Firestore pricingInquiryAlimtalkRequests.note에 저장하고, 알림톡 본문에는 넣지 않습니다.
  • 최근 발송 이력과 내부 메모는 홈탭 수강료 문의 즉시발송 카드의 최근 발송/메모 보기 버튼에서 확인합니다.
  • 홍보성 대량 발송, 기존 회원 전체 발송, 문의 맥락 없는 일괄 발송에는 사용하지 않습니다.
  • 버튼 URL은 공개 Notion 수강료 안내 도메인 `https://archivepilates.notion.site/`을 사용합니다.
  • 같은 전화번호와 템플릿은 7일 안에 중복 발송하지 않습니다.
  • SOLAPI 템플릿이 승인 대기 상태이면 요청 로그만 남기고 실제 발송하지 않습니다.

ARCHIVE 추천식단 프로그램

  • 운영자가 CORE 홈에서 회원 전화번호와 이름을 확인한 뒤 승인된 템플릿으로 설문 링크를 단건 발송합니다.
  • 회원 매칭 원천은 memberProfiles와 memberContactIndex의 전화번호이며, 같은 번호에 서로 다른 이름이 있으면 발송을 멈추고 확인합니다.
  • 추천식단 요청·민감 응답·편집 초안·승인 리포트는 recommendedMealProgramRequests, recommendedMealProgramResponses, recommendedMealProgramDrafts, recommendedMealProgramReports로 분리 저장합니다.
  • 설문 링크는 14일 동안 유효하고, 같은 회원의 동일 프로그램 설문은 30일 안에 중복 발송하지 않습니다.
  • 설문 제출 · 2026.10.20: 누락 항목과 이동 링크를 표시하고, 전송 오류 시 입력 내용을 유지합니다. 중복 클릭은 차단하며 서버의 제출 완료 응답을 받은 뒤 완료로 표시합니다. 이미 제출된 응답·식단은 보존합니다. 원천은 기존 추천식단 요청·응답이며 발송 규칙은 유지합니다. 화면·회귀 검증을 완료했으며 배포 버전은 release.json에서 확인합니다.
  • 설문 제출 시 최신 inbodyWebhookEvents의 measurementId를 따라 inbodyMeasurements의 정규화된 체성분 수치를 연결합니다.
  • 3분 객관식 · 2026-10-29: 식사 목표·식사 횟수·아침·주된 식사 환경·조리 여건·하루 예산·식사 시간·활동·운동 시간·간식·알레르기·선호 음식·안전 확인의 13문항과 별도 정보 활용 동의를 받습니다. 새 설문·서버의 스키마와 동의 버전이 맞아야 제출됩니다. 기존 응답·식단은 재제출하거나 덮어쓰지 않습니다.
  • 관리자 호출 모드 · 2026-10-29: 목적은 운영자가 식단 작성 시점과 범위를 직접 승인하는 것입니다. 제출 완료는 operator_call_required(관리자 호출 대기)이며, 설문 제출 이벤트·기존 생성 API는 초안을 자동 작성하거나 AI API를 호출하지 않습니다. 예약 실행·정기 조회·자동 Codex 깨우기를 추가하지 않습니다.
  • CORE 추천식단의 작성 요청 복사는 정식 requestId와 이 Codex 채팅에 초안(DRAFT)만 작성·저장해 달라는 지시만 복사합니다. 복사 완료는 실행·저장·승인·공개·발송 완료가 아닙니다. 운영자가 이 채팅에 전달하고, 메인 Codex가 최신 원본과 기존 초안을 다시 확인한 후 승인 범위에서만 저장합니다. 설문 원문·건강·InBody·이름·연락처·접근 토큰은 클립보드에 넣지 않습니다.
  • 저장은 원본 응답 sourceHash와 현재 초안 revision에 결속합니다(expectedResponseHash, expectedRevision; 초안이 없을 때만 빈 revision). 원본이나 초안이 바뀌면 덮어쓰지 않고 중단합니다. 관리자 호출 작성 초안은 provider=operator_assisted, model=codex-chat로 구분하며, 기존 응답·초안·과거 동의 이력은 보존하고 자동 무효화하지 않습니다. 승인·공개·발송된 리포트는 읽기 전용입니다.
  • 건강 주의사항·만 18세 미만·알레르기·InBody는 운영자 안전 검토 자료로 유지합니다. 추천식단 서버의 신규 Gemini 등 AI API 호출은 하지 않습니다. 새 설문에서 InBody 없음만으로 제출을 막지 않으며, 기존 응답의 검토 사유와 공개 잠금은 유지합니다.
  • 테스트 시간 예외 · 2026-10-29 한정: 사용자 승인된 김기효 테스트 회원의 이번 추천식단 설문 초대 1회만 정확한 회원·연락처 해시·승인 템플릿·단일 요청 ID·최대 24시간 승인에 결속하여 발송 제한시간 예외를 허용합니다. 전송 직전 원자적 선점을 소진하며 접수·결과 불명은 재전송하지 않습니다. 다른 회원·일반 테스트·리포트·계약·정기 발송의 09:00~23:00 규칙과 중복 차단은 바꾸지 않습니다.
  • 원천은 기존 추천식단 4개 canonical 컬렉션과 alimtalkCandidates/Sends이며, 테스트 승인은 systemSettings의 1회성 기록입니다. 해당 요청 이외의 발송 대상 선택이나 개인정보 동의를 대신하지 않습니다. 과거 Gemini·기본 초안의 생성 출처와 보류 사유는 이력으로 표시하고 새 호출은 하지 않습니다.
  • 구현·검증 · 2026-10-29: CORE 추천식단 화면·원본 조회·원자적 초안 저장·설문 접수 이벤트에 적용합니다. API·보존·중복·공개 잠금 회귀와 320/390/768/1440px 화면 검증을 통과했습니다. 배포·실서비스 확인 결과는 해당일 관리자 호출 전환 보고서에 기록합니다. 호출 시 최신 원본을 다시 확인하며, 로그인·권한·원본 변경·이미 승인된 건은 중단합니다. 추가 AI API 비용·정기 실행·자동 공개·발송은 없습니다.
  • 운영자 승인은 현재 revision의 불변 스냅샷을 저장하고 최초 설문 알림톡에 연결된 리포트 링크를 활성화합니다. 별도 도착 알림톡은 보내지 않으며, 공개 후에는 수정을 잠급니다.
  • 민감 설문 원문은 CORE 목록, 알림톡 후보, 짧은 링크 ID, 회원 리포트에 복사하지 않습니다. 회원은 90일 토큰 링크에서 승인된 식단만 확인합니다.
  • 이 프로그램은 생활 습관 개선용이며 의료적 영양 처방이나 질환 치료를 대신하지 않습니다.
  • 아카이브 추천식단 프로그램 v2 템플릿은 2026.08.04 기준 SOLAPI에서 APPROVED·BA·IMAGE 상태를 확인했습니다.
  • 승인된 이미지형 v2 템플릿을 사용합니다. 회원명 변수, ARCHIVE 이미지, `식단 설문 작성`, `추천식단 확인` 두 버튼 중 하나라도 원격 승인본과 다르면 실제 발송을 차단합니다.
  • 두 번째 알림톡 없이 최초 알림톡의 `추천식단 확인` 버튼에서 완성 리포트를 확인합니다. 공개 전에는 준비 중 화면을, 운영자 승인 후에는 같은 링크에 승인된 리포트를 표시합니다.
  • 단일 버튼 v1 템플릿은 발송 원천에서 제거하고 SOLAPI에서 삭제합니다. 과거 발송 로그의 템플릿 ID는 감사 목적으로만 한글 이름과 함께 표시합니다.

보고 메일

  • 제목은 [알림톡][상태] 핵심내용 형식을 사용합니다.
  • 실패 메일은 실패 대상, 원인, 현재 상태, 다음 조치를 반드시 포함합니다.
  • 제외·차단 명단은 긴 리스트 대신 숫자 요약으로 표시합니다.
  • 후속 처리가 있는 설문/리포트 알림은 Firestore ID와 상세 링크를 함께 남깁니다.
현재 구현 상태2026.09.24 자동 회원알림 스텝 제외, 회원관리 14일 교차 중복 차단, stale 후보 종료, 운영 템플릿만 동기화, 전일 SOLAPI 원장 대조를 functions-alimtalk에 적용했습니다. 원장 대조는 운영 필드 solapiMessageId와 과거 테스트 기록의 providerMessageId를 함께 인정하며, 일치하지 않을 때만 원장 ID 불일치로 보고합니다.
현재 확인 위치CORE Messages / Firestore pricingInquiryAlimtalkRequests, alimtalkCandidates, alimtalkSends, alimtalkTemplateStates, shortLinks

4-1. Instagram 콘텐츠 운영

ARCHIVE PILATES 공식 계정의 초안, 승인, 예약 발행과 성과를 한곳에서 관리합니다.

approval required
릴스 모바일 안전영역 · 2026-10-15상단 겹침 추가 피드백을 반영해 다음 신규 제작부터 mobile-safe-v2를 사용합니다. 1080×1920 기준 상단 320px, 오른쪽 x900 이후, 하단 y1450 이후에는 중요한 문구를 두지 않습니다. 브랜드·제목·강사명은 이전 배치보다 140px 아래로 옮기며 제목·강사명·편집 자막은 긴 화면의 좌우 크롭을 고려한 x144–800 안에 둡니다. 자막은 y1230–1420에 배치하고 하단 브랜드 푸터는 삭제하며 공식 엔딩도 같은 안전영역으로 축소·이동합니다. 영상은 선택 구도를 추가로 잘라 채우지 않고 x120–872, y660–1180 안에 맞춥니다. 원천은 승인된 제작 계획과 공식 로고·원본이며 회원 미러를 사용하지 않습니다. scripts/lib/reel-mobile-layout.py와 daily-teaching-reel.py가 적용 대상입니다. 320·390·430px 및 긴 화면 맞춤/채우기 시뮬레이션과 실영상 로컬 렌더로 검사하며 상단 16% 앱 조작 영역에 겹치거나 넘치는 제목·자막은 업로드 전 중단합니다. 시뮬레이션은 모든 YouTube 앱·네이티브 자막 설정을 보장하지 않으므로 다음 검토본에서 실제 휴대폰 화면도 확인합니다. 기존 승인·게시 영상과 승인된 메타데이터는 변경·재업로드하지 않습니다. 구현·테스트·로컬 샘플과 배포 상태는 같은 날짜의 모바일 상단 여백 작업 보고서에 기록합니다.
판매영상 YouTube 릴스 · 2026-10-14사용자가 '아카이브 릴스 제작'을 명령할 때만 1회성으로 새 릴스 최대 1편을 준비합니다. 매일 제작 예약은 중지했으며 원본당 기존·승인대기 영상을 합쳐 최대 2편으로 제한합니다. 기구 활용·교정·관찰 기준이 뚜렷하지 않으면 제작하지 않고 생략 사유를 home@archivepilates.com에 보고합니다. 공식 유튜브·자막과 연결되는 외장하드 원본을 우선 사용하며 없으면 소유 영상의 허용된 다운로드 경로를 이용합니다. 일부공개 실제 재생·자막·음량·프레이밍·공식 엔딩 검증 후 메일에 영상 확인 링크와 공개 승인 버튼을 넣습니다. 답장 대신 버튼으로 열린 페이지에서 해당 영상의 공개 승인을 누릅니다. 링크 열기·메일 보안 검사만으로는 승인되지 않으며 링크는 7일 동안 유효합니다. 승인 원천은 youtubeReelApprovals의 영상·콘텐츠·파일 해시가 고정된 요청이며 workLanes나 회원 미러를 사용하지 않습니다. 맥미니의 처리기는 제작 없이 5분마다 승인 원천과 비공개 운영 원장을 대조하고 한국시간 하루 최대 1편만 공개합니다. 처리기는 맥미니가 켜져 있고 깨어 있을 때 동작합니다. 기존 공개·구매자 권한은 유지하며 승인 전에는 공개 재생목록·타 SNS에 게시하지 않습니다. 공개 직전 공식 채널·내용 불변·당일 한도·공통 잠금을 확인하고 결과 불명은 실제 상태를 조회한 뒤 처리합니다. 완료·실패 메일은 중복 발송하지 않습니다. 실패 후 대기 목록이 비었더라도 유튜브 인증과 공식 채널 조회를 통과하기 전에는 복구로 판단하지 않습니다. 오류 로그와 비공개 원장에는 발생 시각·오류 유형·코드 위치만 기록하고 비밀번호·토큰·메일 승인 링크는 기록하지 않습니다. 승인 서버 배포, 모바일 버튼 승인 저장, 링크 조회만으로 승인되지 않음, 테스트 요청의 실제 공개 제외를 확인했습니다. ACH9 실영상은 유효한 버튼 승인 기록을 대조해 전체공개 및 완료 메일 발송을 확인했습니다. 과거 실패의 상세 원인은 기존 로그에 남아 있지 않아 단정하지 않으며 백그라운드 인증·채널 조회를 별도로 검증합니다.

계정 방향

  • 공식 계정은 ARCHIVE PILATES 본사 성격의 브랜드 채널로 운영합니다.
  • 콘텐츠 축은 브랜드·메소드, 명지점·현장, 프로모션·전환, 사람·커뮤니티 네 가지입니다.
  • 지역 운영정보와 상담 전환을 다루되 과장된 효능, 회원 개인정보, 건강정보는 게시하지 않습니다.

발행 흐름

  1. 운영자 또는 자동화가 socialContentDrafts에 초안을 저장합니다.
  2. 운영자가 캡션, 미디어, 발행시각을 검토하고 승인합니다.
  3. 승인 후 socialPublishJobs에 예약 작업을 만들고 Functions가 Meta API로 발행합니다.
  4. 결과는 socialPublishLogs와 socialInsightsSnapshots에 남겨 CORE 콘텐츠 탭에서 확인합니다.

운영 리듬

  • 주 3회를 기본으로 릴스 1건, 정보형 캐러셀 1건, 명지점 현장 소식 1건을 준비합니다.
  • 프로모션만 반복하지 않고 네 가지 콘텐츠 축이 한 달 안에 고르게 보이도록 조정합니다.
  • 성과는 팔로워 수만 보지 않고 도달 대비 팔로우, 프로필 방문, 링크 클릭, 상담 전환을 월 단위로 함께 확인합니다.

안전 규칙

  • 자동화는 초안과 검토 요청까지만 만들며 운영자 승인 없이 실제 게시하지 않습니다.
  • 콘텐츠 본문, 미디어, 발행시각으로 만든 idempotency key가 같으면 중복 작업을 만들지 않습니다.
  • Meta 발행 요청 이후 결과가 불명확하면 자동 재시도하지 않고 수동확인으로 전환합니다.
  • Meta 연결 정보가 없거나 검증되지 않으면 승인 버튼과 예약 발행을 차단합니다.
  • 승인 시점과 실제 발행 직전에 연결 계정이 archivepilates_official인지 다시 확인합니다.
  • Instagram 운영은 회원 선정, 알림톡, StudioMate, 연락처 쓰기의 원천으로 사용하지 않습니다.
  • Meta Secret이 not-configured 상태이면 초안 작성·검토만 허용하고 승인, 예약 발행, 성과 동기화는 차단합니다.

현재 상태

  • Functions codebase는 functions-social로 분리해 다른 운영 기능과 배포 경계를 나눕니다.
  • 미디어는 Meta가 읽을 수 있는 공개 HTTPS 주소만 사용할 수 있습니다.
  • Meta 전문 계정 연결과 권한 검증 전에는 로컬 구현 상태이며 실제 발행 테스트를 하지 않습니다.
현재 확인 위치CORE Content / Firestore socialContentDrafts, socialPublishJobs, socialPublishLogs, socialInsightsSnapshots

5. 프라이빗 오늘 기록·리포트

강사는 기록과 전달만 처리하고, 중간 생성 단계는 시스템이 맡습니다.

v4 심사 중

단일 흐름

  • 운영자는 CORE Private에서 기록 대기, 자동 처리 중, 확인 후 발송, 전달 완료만 확인합니다.
  • privateLessonSessions가 단계, 다음 작업, 오류를 보여주는 운영 장부입니다. 예약과 회차를 다시 계산하는 원천으로는 사용하지 않습니다.
  • 예약 원천은 bookings, 회차 원천은 bookings에서 계산한 privateSessionLedger입니다.
  • privateLessonChartRequests와 privateLessonChartRecords는 기존 설문 링크와 기록을 유지하는 호환 문서입니다.
  • 2026.06.01 이후 프라이빗/세미프라이빗 수업은 자동 기록 페이지를 생성합니다.

회차·예약 보정

  • 어제 이전 예약확정/출석미체크 수업은 확정 회차로 세지 않습니다. 오늘 이후 예약은 예정 회차로만 이어 세고, 출석 완료가 반영되면 확정 회차가 됩니다.
  • booking.sessionOrder.privateCumulativeRound는 privateSessionLedger에서 내려쓴 캐시입니다. 값이 없거나 원천과 다르면 즉시 재계산해 저장합니다.
  • 삭제, 취소, 시간변경은 sessionOrder.counted=false와 제외 사유를 남기고 해당 수업 이후 회차까지 연쇄 재계산합니다.
  • usage_booking_ 같은 이용내역 fallback 예약은 실예약 장부와 회차 계산에서 제외합니다.
  • booking.lessonType=group인 수업은 수강권명이 프라이빗처럼 보여도 프라이빗 회차에서 제외합니다. 원본 분류가 틀렸다면 원본 보정 후 다시 반영합니다.
  • 강사 오늘 기록 안내, 링크 열기, 기록 제출, 회원 리포트 발송은 연결된 booking이 active일 때만 진행합니다.
  • 수업 시간이 변경되면 supersededByBookingId를 우선 따라 같은 수업 세션으로 이관하고, 연결이 불명확하면 자동 발송하지 않고 확인필요로 둡니다.
  • 같은 회원, 강사, 날짜, 수강권에서 시간변경 중복이 생기면 출석/최신 예약을 대표 booking으로 두고 나머지는 rescheduled_duplicate로 제외합니다.
  • 예약 동기화 중 차트가 일시적으로 자동 취소되었더라도 같은 예약이 privateSessionLedger에 다시 확인되면 차트 단계와 Notion 표시를 함께 복원합니다. 운영자·테스트·사유 불명 취소는 자동 복원하지 않습니다.
  • 복원 시 기존 알림톡 발송 ID와 발송시각은 유지하고 재발송하지 않습니다. 자동 취소 오류 문구만 제거합니다.

Notion 차트 동기화

  • 운영규칙은 CORE가 기준이지만, 개인레슨 회차 차트는 강사별 회원 페이지 하위의 Notion 일반 페이지로 유지합니다.
  • Notion은 읽기 전용 표시·열람용입니다. Private Session Records DB, 웹훅 승인, 예약 스케줄러는 사용하지 않습니다.
  • 개인레슨 차트 상단은 현재 진행 흐름과 강사별 차트만 우선 표시합니다. 자동화 테스트 차트와 기타 자료는 접힌 보관 영역에 분리하고, 이전 DB 기반 운영 문서는 보관 처리합니다.
  • 차트 상태와 발송 승인은 Firestore privateLessonChartRecords, 운영 진행상태는 privateLessonSessions가 원천입니다.
  • 누락과 오류는 CORE와 Firestore 원천에서 판단하며 Notion 화면은 운영 검수 기준으로 사용하지 않습니다.
  • Notion 차트 제목에는 수업 기록대기 → 리포트 생성중 → 리포트 생성완료 → 리포트 발송완료를 표시합니다. 취소 또는 원천 확인필요 건은 별도 상태로 구분합니다.
  • 리포트 생성완료는 오늘 기록 제출, 리포트 생성 상태, 회원용 리포트 URL 준비가 모두 확인된 경우에만 표시합니다.
  • 회원용 리포트는 오늘의 핵심, 오늘 확인한 변화, 다음 수업 방향, 홈워크 순서의 코칭 카드형 화면으로 제공합니다. 홈워크는 강사가 입력한 경우에만 노출합니다.
  • 회차 기록·요청 변경은 먼저 Firestore에 확정하고, 변경 이벤트가 5초 후 최신 내용을 읽어 Notion 제목과 본문을 백그라운드로 갱신합니다. Notion 처리를 기다리지 않고 저장·리포트 확인·발송을 진행합니다.
  • 같은 내용의 반복 저장은 Notion에 다시 쓰지 않습니다. 처리 중 수정되면 최신 버전을 다시 반영하며, Notion 오류는 원본·발송 상태를 변경하지 않습니다.
  • 회원 폴더 누락 재발방지 · 2026.10.30: 제출된 리포트에 노션 회원 폴더가 없으면 기존 동기화 안에서 원본 회원 ID·전체 연락처·담당 강사·센터를 확인한 뒤 해당 강사 영역에 폴더를 한 번 생성합니다. 회원별 생성 선점과 동명 폴더 선점을 함께 확인하며, 생성 결과가 불명확하거나 기존 동명 폴더의 연결이 없으면 자동 재생성·덮어쓰기 없이 확인필요로 남깁니다. 취소·미제출·신원 미확정 건은 새 폴더를 만들지 않습니다. 원천은 privateLessonChartRecords · privateLessonChartRequests · memberProfiles · staffs이고 syncStates의 privateNotionMember_ · privateNotionMemberTitle_는 표시용 처리 메타데이터입니다. 회원 발송·예약·계약 원천으로 사용하지 않습니다. 새 주기 실행·알림톡 발송은 없습니다. 신원·동시 저장·응답 불명확·전송 대기 중 변경을 무발송 검증했으며 관련 동기화 함수와 이 안내가 포함된 Hosting 릴리스부터 반영합니다. 결과 불명확 건은 운영자가 생성 원장을 대조한 뒤 조치합니다. 최종 갱신: 2026.10.30.
  • 발송 상태·연결 보강 · 2026.10.20: 발송 승인 후 화면은 대기·처리 중 상태를 읽기 전용으로 재확인하며 완료되면 저장과 중복 발송을 잠급니다. 화면 복귀 시에도 최신 상태를 확인하되 작성 중인 입력은 보존합니다. 응답 시간초과는 처리 결과 불명확으로 안내하고 저장·발송 POST를 자동 재시도하지 않습니다. 원천은 privateLessonChartRequests·privateLessonChartRecords와 발송 원장이고 Notion 반영은 별개입니다. 정유리 강사 차트 연결을 기존 개인레슨 차트 아래에 추가하고 누락 기록만 동기화합니다. 기존 답변·리포트·수신자·발송 이력과 권한은 변경하지 않습니다. 차트 Hosting과 관련 private-chart 함수 반영·검증 결과는 2026-10-20-private-report-state 보고서를 따릅니다. 다음: 전달 완료 뒤 수정이 필요하면 운영자에게 요청합니다.
  • 수업 시간의 오전·오후 표기는 서버와 Mac mini에서 동일하게 정규화합니다. 실행 환경의 AM/PM 차이 때문에 같은 차트를 다시 쓰지 않습니다.
  • 매일 22:20 야간 작업은 대기·실패 건과 전체 기록을 번갈아 점검합니다. 최대 300건, 작업 시작 예산 7분 30초로 제한하고 저장된 점검 위치부터 다음 날 이어갑니다. 오래된 누락도 순차 확인합니다.
  • 예약 시간·취소·회차 변경이 Firestore 회차 요청에 반영되면 Notion 제목과 본문도 갱신합니다. 취소 차트는 기존 규칙대로 회원 발송 후보에서 제외하며, 전달 완료는 실제 발송 기록이 있을 때만 표시합니다.
  • 차트는 실제 입력된 기록만 표시하고 사전설문 참고·홈워크·주의사항·자료는 접어서 표시합니다. 이전 양식 기록과 별도 첨부·하위 페이지는 보존합니다. 자동 생성한 블록의 식별자와 내용이 모두 일치할 때만 교체하며, 수동 메모와 직접 수정된 하위 내용은 보존합니다.
  • Notion 페이지 한 개는 검증된 대표 차트 한 개만 갱신합니다. 중복 예약의 이전 차트는 원본을 유지하되 Notion 쓰기만 제외합니다. 제목만 같은 미연결 페이지는 자동으로 덮어쓰지 않습니다.
  • 2026.09.06 정리: 페이지 소유권은 syncStates의 privateNotionPage_ 항목, 중복·회원 페이지 연결·확인 사유는 notionProjectionControl 처리 메타데이터로 분리합니다. 예약·설문 답변·리포트 승인·발송 원천에는 사용하지 않습니다. 출석 원천이 불명확한 기록은 Notion에서 확인필요로 표시하며 취소나 회차를 임의 확정하지 않습니다.
  • 정리 결과: 회원 페이지 20곳의 이전 회차 279개를 접고, 본문 188개와 제목 272개를 정리하며 누락 차트 26개를 연결했습니다. 제목 469개·본문 188개·원본 차트 및 요청 각 484개 대조를 통과했습니다. 별도 예약 동기화가 갱신한 참조 1건은 검증해 보존했고, 원천 확인 대기 4건은 임의 수정하지 않았습니다.
  • 공유 상태: 참가자 본인에게 전달하는 링크형 Notion 차트는 공개 주소를 허용합니다. 검색 엔진 인덱싱은 끄고 링크를 전체 공지나 공개 채널에 게시하지 않습니다. 공개 주소 여부는 동기화를 막지 않지만 보관·휴지통 상태, 다른 강사 영역, 중복 페이지는 계속 차단합니다.
  • 2026.09.16 운영 결정: 이초림 강사 영역의 참가자 전용 공개 링크를 유지하면서 차트 동기화를 계속합니다. Firestore가 원천이며 Notion 공개 범위 변경은 자동화가 수행하지 않습니다.
  • 2026.09.06 배포 검증: functions-private-chart 24개 업데이트, 회귀 테스트 76건·전체 빌드·원천 및 비용 가드 통과. 최종 격리 차트의 Firestore 저장 0.106초, Notion 최초 반영 10.5초·수정/요청 변경/복구 15.2~15.3초를 확인했습니다. 같은 내용 재저장·요청 변경·실패 복구·한국어 오전·오후 표기·수동 문단과 토글 보존을 검증하고 합성 문서와 차트를 정리했습니다. 원천은 privateLessonChartRecords와 privateLessonChartRequests이며, 동기화 상태·점검 위치·페이지 및 생성 블록 소유권은 처리용 메타데이터입니다. 실제 회원 기록·발송 변경 없음. 야간 복구는 22:20 활성 상태입니다.
  • 2026.09.07 보강: 점검은 bookings와 privateSessionLedger뿐 아니라 차트 요청·기록·Notion 확인표시까지 대조합니다. 원천 복구 뒤 시스템 자동취소만 복원하고 수동 취소와 기존 발송 증거는 보존합니다.

간소화 기록

  • 회원 최초 프라이빗 사전설문은 예약별 토큰을 가진 ARCHIVE PILATES 자체 설문을 사용하며 회원별 영구 1회만 받습니다.
  • 취소·변경되었거나 active 상태가 아닌 예약 링크는 열기와 제출을 모두 막습니다.
  • 설문 알림톡은 후보 생성 때와 실제 발송 직전에 연결 예약을 다시 확인합니다. 자체설문 링크형 v2는 기존 ARCHIVE PILATES 로고 이미지형 양식을 유지하며, 승인 상태·버튼 URL·이미지 ID가 모두 일치하기 전에는 발송하지 않습니다.
  • 회원 설문 제출 후 담당강사 확인 알림도 긴 설문ID·접근토큰 URL을 직접 넣지 않고 shortLinks의 sv- 링크만 사용합니다. v2가 승인되기 전에는 기존 v1로 되돌아가 발송하지 않습니다.
  • 강사의 매 수업 전 계획 제출과 수업별 D-1 차트 알림은 사용하지 않습니다. 강사별로 하루 한 번 보내는 오늘 기록 단일 링크에서 당일 수업을 선택합니다.
  • 강사용 프라이빗 오늘 기록 안내 v4는 2026.09.08 SOLAPI 승인과 BA·IMAGE·기존 ARCHIVE PILATES 이미지·오늘 기록 버튼 계약을 확인했습니다. 실제 발송은 이 계약을 매번 다시 확인하며 v2·v3로 되돌아가지 않습니다.
  • 승인 상태는 07:00부터 21:00까지 매시 확인하지만, 실제 알림톡은 강사별·날짜별 원자적 발송 장부로 하루 한 번만 허용합니다. 결과가 불명확하거나 실패한 발송은 자동 재발송하지 않습니다.
  • 필수 입력은 진행 부위, 확인한 변화, 다음 방향 세 가지입니다. 주의사항, 홈워크, 컨디션, 사용 기구, 사진·영상은 접힌 선택 영역에서 필요한 경우에만 작성합니다.
  • 기록 화면은 회원 최초 사전설문 요약과 직전 리포트를 함께 보여주며, 점수·평균·등급·1-5 평가 표현을 사용하지 않습니다.
  • 저장하면 강사가 쓴 다음 방향을 그대로 보존해 리포트를 즉시 만들고 같은 화면에서 문장을 확인·수정한 뒤 한 버튼으로 발송 승인합니다.

목적 템플릿

  • 회원은 최초 사전설문에서 체형교정/정렬, 다이어트/체력, 통증/회복, 산전·산후/컨디션 중 하나를 선택합니다.
  • 회원 선택값을 우선 적용하고, 과거 서술형 응답은 키워드 기반 자동 분류로 보정합니다.
  • 오늘 기록과 리포트 문장 규칙은 목적 템플릿별로 달라집니다.
  • 5회 단위 회차는 리뷰 회차로 보고 누적 변화와 다음 블록 방향을 더 의식해 작성합니다.

미디어

  • 강사는 오늘 기록 페이지의 접힌 선택 영역에서 사진/영상을 첨부합니다.
  • 사진·영상 업로드는 별도 알림톡 버튼이나 Notion 링크가 아니라 각 수업의 ARCHIVE PILATES 오늘 기록 화면 안에서 처리합니다.
  • privateLessonChartRequests.mediaUploadShortUrl의 shortLinks target은 `https://in.archivepilates.com/private-chart/?mode=post...&focus=media` 형식이어야 합니다.
  • 파일은 home@archivepilates.com 권한으로 Google Drive 프라이빗 리포트 미디어 폴더에 저장합니다.
  • Firestore에는 Drive file ID, 링크, mime type, size, 리포트 포함 여부만 저장합니다.
  • 현재 기준은 첨부한 미디어를 같은 회차 리포트에 자동 포함하는 단순 운영입니다.
  • 완료된 업로드 재시도는 같은 Drive 파일을 다시 확인해 결과만 반환하며, 리포트 revision이나 발송 승인을 다시 변경하지 않습니다.
  • 업로드는 16MB 청크 기준으로 Function이 Drive resumable upload 세션을 발급하고, 브라우저가 Drive로 직접 전송한 뒤 Function이 완료 기록만 남깁니다.
  • Drive 업로드 완료 후 파일명, 형식, 크기, 회차 폴더를 서버에서 다시 검증하고 리포트 첨부가 끝나야 업로드 완료로 표시합니다.
  • Drive 직접 업로드가 브라우저 또는 네트워크 정책에 막히면 첫 청크 전에만 기존 Function 중계 경로로 자동 fallback합니다.
  • 미디어 업로드만으로는 Gemini 리포트 문장을 다시 생성하지 않습니다. 기존 오늘의 핵심과 다음 수업 방향은 유지하고 미디어 섹션만 다시 렌더링합니다.
  • 배포 전후 기본 검증은 scripts/validate-private-media-upload-live.mjs로 실제 이미지/영상 업로드, Drive 직접 업로드, 리포트 미디어 삽입만 확인하며 Gemini를 호출하지 않습니다.
  • Gemini 리포트 생성 검증은 --with-gemini-report 옵션을 붙인 별도 실행에서만 진행합니다.
  • Gemini 쿼터가 막히면 리포트 전체를 실패시키지 않고 template_fallback 문장으로 검수 가능한 임시 리포트를 생성한 뒤 gptError에 원인을 남깁니다.

수정 잠금

  • 오늘 기록은 리포트 생성 후에도 회원 알림톡 발송 전까지 수정할 수 있습니다.
  • 문장이나 미디어를 수정하면 reportRevision을 새로 만들고 기존 승인/대기 후보는 다시 검수 상태가 됩니다.
  • 회원 리포트 자체의 오늘의 핵심, 다음 수업 방향 문장도 알림톡 발송 전까지 직접 수정할 수 있습니다. 수정하면 기존 발송 후보는 보류하고 다시 승인합니다.
  • 승인 시점의 문장과 미디어를 immutable snapshot으로 고정하며 발송 URL도 해당 revision을 가리킵니다.
  • 설문 답변, 수업시간, 담당강사, 회차 또는 미디어가 바뀌면 기존 승인 스냅샷과 미발송 후보를 무효화합니다.
  • 스냅샷 도입 전 발송된 과거 리포트는 잠긴 현재 발송본을 읽기 전용 호환 스냅샷으로 열 수 있게 유지합니다.
  • 회원 리포트 알림톡 발송 완료 이후에는 회차 기록을 잠급니다.
  • 발송 처리 중에는 중복과 충돌을 막기 위해 임시 잠금합니다.
현재 확인 위치CORE Private / Firestore bookings, privateSessionLedger, privateLessonSessions, privateLessonChartRequests, privateLessonChartRecords

5-1. 강사 평가·온보딩

평가 결과와 수업 관찰 기록을 각각의 원천에 보존하고 강사 교육에 사용합니다.

staff

운영 흐름

  1. 강사 또는 운영자가 CORE Staff 평가 퀴즈 화면에 로그인합니다.
  2. 문항은 Firebase Function에서 받아오고, 정답은 브라우저에 노출하지 않습니다.
  3. 제출하면 Function이 객관식·단답형·서술형을 채점하고 staffEvaluationSubmissions에 원본 제출 기록을 저장합니다.
  4. 강사별 staffHrCards/{staffId}와 하위 quizResults에 최신 결과와 누적 요약을 반영합니다.
  5. 입사지원자는 CORE 강사 현황의 강사 테스트 버튼에서 공개 시험 사이트를 열고 이름과 연락처 입력 후 20분 제한시간으로 응시합니다.
  6. 운영자는 CORE Staff 탭에서 강사별 최신 점수, 통과 여부, 서술형 답변과 점수를 확인하고 필요 시 수정합니다.
  7. 강사 이름을 선택하면 해당 강사의 퀴즈 답변과 월별 그룹 예약률, 출석률, 평균인원, 수업매출을 세부 카드로 확인합니다.
  8. 강사 인사기록카드 상단에는 종합 점수와 산출 기준을 먼저 표시합니다.
  9. 강사 리스트는 현재 근무중 강사와 입사시험 지원자/퇴사/비활성 기록을 분리해서 표시합니다. 비근무·지원자·운영자 기록은 기본 접힘 상태로 둡니다.

권한과 원천

  • 퀴즈 제출은 Firestore 직접 쓰기가 아니라 submitInstructorEvaluationQuiz callable로만 처리합니다.
  • 일반 강사는 본인 staffId 기준 제출만 가능합니다.
  • 운영자와 매니저는 대상 강사를 선택해 제출/검토할 수 있고, Q19 서술형 점수를 조정할 수 있습니다.
  • 지원자 입사시험은 instructorApplicantEvaluationApi HTTP Function으로만 시작/제출하며 Firestore 직접 쓰기는 허용하지 않습니다.
  • staffEvaluationSubmissions는 제출 원본, staffHrCards는 인사기록카드 read-model입니다.
  • 강사 평가 제출 원본과 인사기록카드는 ARCHIVE CORE 관리자만 읽을 수 있으며, 직접 쓰기는 허용하지 않습니다.
  • 지원자 원본은 staffApplicantEvaluationSessions와 staffApplicantEvaluationSubmissions에 별도로 보관합니다.
  • 인사·평가 화면의 현재 근무중 표시는 staffs.employmentStatus(current/inactive)를 우선 사용하고, 유효한 근무 상태가 없으면 active === true만 사용합니다. 이는 강사 CORE 접근 허용의 fallback이 아니며 접근은 별도 현재 근무 게이트를 통과해야 합니다. instructor/owner와 지원자 구분은 유지하며 manager/viewer는 운영자 계정, 인사·시험 기록만 있는 대상은 비근무/지원자 기록으로 보관합니다.
  • 지원자 시험 ID와 입사 후 강사 ID가 달라진 경우 휴대폰번호가 현재 근무중 강사 정확히 한 명에게만 일치할 때 연결합니다. 비근무 동명이력은 연결 후보에서 제외합니다.
  • 2026-10-07 근무 명단 연동: 원천은 StudioMate 직원 탭 전체 명단이며, 기존 Excel 동기화 runner에서 매일 완전 스캔 후 staffs.employmentStatus, employmentSource=studiomate_staff_tab_browser_scan, employmentSyncedAt을 반영하는 방식입니다. 명단에서 빠진 대상은 비근무로 보존하고 삭제하지 않습니다. 실패·부분 스캔은 근무 상태를 변경하지 않습니다.
  • 근무 명단 연동은 기존 staffs.active, role, uid와 비밀번호를 변경하지 않습니다. 2026-10-11 강사 CORE 접근 규칙은 이 스캔의 근무 메타데이터를 별도 접근 게이트에서 확인하므로 비근무 반영 후 강사 업무를 차단하는 범위로 확대합니다. 기존 운영자 권한·연락처·알림톡 정책은 유지합니다. 접근 변경의 배포·격리 라이브 검증과 승인된 강사 4명 연결은 완료했습니다. CORE 새로고침은 Firestore만 읽고 StudioMate 스캔을 시작하지 않습니다.
  • 2026-10-07 구현·검증: 전체 명단 5명과 근무 상태를 대조하고 회귀 테스트를 통과했습니다. 배포 범위: CORE Hosting과 Mac mini runner. 다음 확인: 첫 정기 전체 스캔 결과. 강사 조회 오류나 브라우저 잠금은 운영 경고로 남기고 다음 정기 실행에서 재확인하며, 정상 완료된 회원·예약 원천의 최신성은 무효화하지 않습니다.
  • 인사기록카드는 외부 발송, 정산, 예약, 회원 응대 자동화의 원천으로 사용하지 않습니다.

문항 관리

  • 현재 문항은 공개 Google Form ARCHIVE 강사평가 퀴즈 A에서 확인한 22문항과 선택지 기준입니다.
  • 객관식 18문항은 각 4점, 단답형 3문항은 각 6점, Q19 서술형은 10점으로 채점합니다.
  • Q19 서술형은 imprint 정의, 골반 후방경사, 요추/매트 정렬, 코어 안정, 사용 상황, 주의점을 기준으로 1차 자동 루브릭 채점합니다.
  • 운영자가 Q19 점수를 수정하면 staffEvaluationSubmissions, staffApplicantEvaluationSubmissions, staffHrCards/{staffId}/quizResults, staffHrCards 최신 요약을 함께 갱신합니다.
  • 기존 Google Form 응답은 새 Google Sheet ARCHIVE 강사평가 퀴즈 A Firebase 기록으로 이관해 보관합니다.
  • Firebase 제출은 새 Google Sheet의 원본 응답 탭과 참가자별 최종 결과 탭에도 보조 기록합니다. 실패해도 시험 제출은 유지하고 제출 문서에 googleSheetSync=failed로 남깁니다.
  • 월별 그룹 예약률, 출석률, 평균인원, 수업매출은 dashboardSnapshots/current의 강사통계·강사별 데이터를 읽기 전용으로 표시합니다.
  • 월 수업 개수, 회원만족도, 클레임 현황은 원천 컬렉션이 확정되기 전까지 연결 대기로 표시하고 인사 판단의 자동 원천으로 쓰지 않습니다.
  • 종합 점수 v1은 평가 퀴즈 35%, 그룹 예약률 30%, 그룹 평균인원 25%, 그룹 출석률 10% 기준입니다. 아직 연결되지 않은 항목은 제외하고 연결된 항목의 가중치만 100점 기준으로 환산합니다.
  • 그룹 평균인원은 4.5명을 100점 기준 목표치로 환산합니다. 월 수업수, 회원만족도, 클레임 현황은 원천이 확정되면 v2 산식에 반영합니다.
  • 과거 Google Form 응답은 공식 점수를 보존해 staffHrCards로 이관하고, 새 Firebase 제출은 최신 정답키로 채점합니다.
  • 기존 응답 시트에는 Q9 선택지 버전 차이와 Q20 정답키 입력 오류 흔적이 있어 과거 응답을 최신 키로 재채점하지 않습니다.
  • 문항 변경 시 기존 제출 결과는 삭제하지 않고 quizVersion으로 구분합니다.
  • 자동 채점 합격 기준은 80점 환산이며, 미달 시 CORE Staff 탭에서 검토 필요로 표시합니다.

차트와 이관

  • CORE Staff 탭은 staffEvaluationSubmissions와 staffHrCards의 최신 요약을 함께 읽어 강사별 점수 차트를 표시합니다.
  • 공유된 응답 시트의 과거 결과는 import-staff-evaluation-google-results 스크립트로 dry-run 확인 후 이관합니다.
  • 이관된 결과는 source=google_form_legacy_import로 표시해 새 Firebase 제출과 구분합니다.
  • 지원자 제출 결과는 staffRole=applicant로 표시하고, 연락처는 채용 검토용으로만 사용합니다.
  • 인사기록카드 차트는 최신 점수, 최고 점수, 제출 횟수, 검토 상태만 운영자가 빠르게 볼 수 있게 표시합니다.

타 강사 수업 분석 설문

  • 온보딩 강사는 ARCHIVE IN 설문 링크에서 현장 참가 또는 영상 시청을 선택하고, 수업일·분석일, 수업 정보와 11개 관찰 문항을 제출합니다.
  • 핵심 문항은 수업 목표, 큐잉, 수준 조절, 본인 수업 적용이며 단순 호감 평가보다 관찰·분석·적용을 우선합니다.
  • 응답 원천은 Firestore instructorObservationResponses입니다. 작성 강사·참관 방식·수업일 또는 분석일·수업 대상 강사·수업명으로 만든 canonical key가 같은 제출은 하나로 처리합니다.
  • Notion 수업 분석 페이지는 교육자가 확인하는 투영 화면이며 수업 대상 강사별로 묶어 봅니다. 좋았던 관찰, 추가로 볼 부분, 다음 관찰 주제, 확인자와 확인일은 Notion에서 작성합니다.
  • Notion 일시 오류가 있어도 Firestore 원본은 유지하며 같은 제출을 다시 보내면 미동기화 기록만 재시도합니다.
  • 설문 결과는 회원 연락, 예약, 알림톡, 정산 또는 인사평가 자동화의 원천으로 사용하지 않습니다.
현재 확인 위치CORE Staff / 공개 시험 https://in.archivepilates.com/instructor-evaluation/ / 온보딩 설문 https://in.archivepilates.com/instructor-observation/ / Firestore staffs, staffEvaluationSubmissions, staffApplicantEvaluationSubmissions, staffHrCards, instructorObservationResponses, auditLogs

6. 주차등록

ARCHIVE CORE 홈에서 회원, 강사, 방문 차량을 등록하고 주차권을 적용합니다.

active

운영 규칙

  • 회원과 강사 차량은 이름 또는 연락처와 차량번호로 등록합니다. 방문 차량은 일회성 등록이므로 차량번호와 선택 메모만 입력하고 이름·연락처는 저장하지 않습니다.
  • 차량 원천은 parkingVehicles 컬렉션입니다. 회원카드와 강사카드에는 기본 차량만 표시용으로 미러링하고, 방문 차량은 오늘 날짜 일회성 차량으로 보관합니다.
  • 등록 차량의 삭제 버튼은 차량을 보관 상태로 전환하고 회원/강사 카드의 차량 미러를 함께 정리합니다. 이미 처리된 주차권 작업 이력은 감사용으로 유지합니다.
  • 오늘 예약된 수업 시작 30분 뒤, 등록 차량이 있는 회원/강사를 대상으로 parkingDiscountJobs를 자동 생성합니다.
  • 자동 후보 확인은 10분마다 Firestore에서 수업 시작 30분이 지난 최근 75분 구간만 읽습니다. 오늘 예약 전체를 반복 조회하지 않으며, 해당 구간에 수업이 없으면 차량 목록도 읽지 않습니다.
  • 같은 작업은 고정 job id로 중복 차단하며 새 작업이 생길 때만 아이파킹을 호출합니다. 운영자의 오늘 자동적용 실행만 누락 복구를 위해 오늘 전체를 확인합니다.
  • 입차 기록 조회는 작업당 1회만 수행합니다. 입차 기록이 없으면 자동 재조회하지 않고 manual_review/no_entry로 남긴 뒤 주차등록 확인필요 메일을 1회 발송합니다.
  • 방문 차량은 수업 예약과 매칭하지 않고, 오늘 자동적용 실행 버튼을 눌렀을 때 당일 방문 차량으로 parkingDiscountJobs를 생성합니다.
  • 같은 날 같은 사람·차량은 하나의 안정적인 job id로 묶어 중복 주차권 생성을 막습니다.

아이파킹 적용

  • 메인 계정은 704호와 705호이며, 2시간 할인권을 계정별 1개씩 우선 적용합니다.
  • 서브 계정은 504호부터 508호이며, 메인 계정 적용이 불가능하거나 이미 사용된 경우에만 순서대로 사용합니다.
  • 각 계정의 고유 상점 번호로 할인권 조회·적용·중복 확인을 수행합니다. 다른 계정의 상점 번호를 재사용하지 않습니다.
  • 자동 적용 최대 시간은 4시간입니다. 기본 할인권명은 2시간 할인입니다.
  • 강사 차량은 수업 종류와 수업 시간에 관계없이 2시간 할인권 2개, 총 4시간을 적용합니다.
  • 회원·강사 차량은 예약 수업시각과 입차시각을 비교하지 않고 등록된 전체 차량번호로 현재 입차 건을 확인합니다. 같은 차량의 현재 입차 건이 여러 개면 가장 최근 건을 사용합니다.
  • 등록된 회원·강사 차량 자체가 현재 입차 목록에 없을 때만 수동확인 상태로 남기며, 같은 끝자리의 다른 차량에는 할인권을 적용하지 않습니다.
  • 방문 차량은 기존 차량번호와 입차시각 안전 검증을 유지합니다.
  • 적용 결과는 parkingDiscountJobs와 연결 bookings 문서의 parkingStatus에 기록합니다.

강사레슨 주차 사전등록

  • D-1 알림톡의 개인별 주차 링크는 instructorLessonParkingPreRegistrations를 원천으로 사용하고, 공개 화면은 불투명 토큰으로 해당 예약만 확인합니다.
  • 같은 날 두 세션을 듣는 예약자는 예약 ID를 하나의 요청으로 묶습니다. 등록 시점과 아이파킹 조회 직전에 현재 reserved 예약, 수업일과 시작시각을 다시 확인합니다.
  • 공개 링크로 등록한 차량은 해당 수업일에만 유효합니다. 회원의 영구 기본차량으로 저장하지 않으며 연결 bookings의 parkingVehicleId가 자동 적용 차량의 우선 기준입니다.
  • 차량번호 등록과 변경은 수업 시작 20분 후 닫고, 수업 시작 30분 후 입차를 한 번 조회합니다. 전체 차량번호는 등록 완료 화면과 운영 메일에 다시 노출하지 않습니다.
  • 스텝 샘플은 실제 수업일과 시작시각을 담은 저장되지 않는 전용 프리뷰 링크를 사용하므로 실제 예약자의 차량등록 권한을 복사하지 않습니다.
  • 4버튼 v3 템플릿은 2026-08-28 승인본의 채널, 본문, 이미지, 버튼과 링크 변수를 확인한 뒤 운영 연결했습니다. 스텝 샘플과 본 발송 모두 v3만 사용합니다.

검증 위치

  • 홈 주차등록 섹션에서 회원/강사/방문 등록 차량과 최근 주차권 작업을 확인합니다.
  • 자동화는 scheduledCreateParkingDiscountJobs가 작업을 만들고 processParkingDiscountJob이 실제 아이파킹 적용을 수행합니다.
  • 문제 발생 시 수동확인 또는 error job만 운영자가 확인합니다.
  • 입차 기록 없음 메일에는 수업일시, 대상 이름, 차량번호 뒤 4자리, 작업 ID와 CORE 확인 링크만 표시하며 전체 연락처와 전체 차량번호는 노출하지 않습니다.
  • 확인필요 메일 자체가 실패하면 자동 재시도하지 않고 최근 주차권 작업에 확인메일 실패 상태와 오류를 표시합니다.
현재 확인 위치CORE Home / 공개 주차 사전등록 / Firestore instructorLessonParkingPreRegistrations, parkingVehicles, parkingDiscountJobs, bookings parkingStatus

7. 회원등록·가입 이력·연락처

회원과 수강권은 StudioMate에서 등록하고, 계약서와 가입완료 안내는 검증된 일반회원에 한해 자동 처리합니다.

StudioMate

신규 등록 운영 기준 · 2026-09-14

  • 2026-09-14부터 onsiteWelcome 현장 웰컴의 신규 접수와 신규 알림톡 발송을 중단합니다. 기존 회원가입서 발송 메뉴는 ARCHIVE CORE 회원등록 진행상황 화면으로 대체합니다.
  • StudioMate 회원등록에서 회원과 수강권을 한 번 등록합니다. 검증된 일반회원 수강권이면 계약서 작성·직인·서명요청은 자동으로 이어집니다.
  • 시간당 회원목록 동기화가 신규 수강권을 감지해 StudioMate 자체 계약서를 자동 작성합니다. 검증된 과거 정규 구매가 없으면 ‘아카이브 회원가입’, 있으면 ‘아카이브 재등록’을 사용합니다. 과거 전자계약서 유무만으로 재등록을 제외하지 않습니다.
  • ARCHIVE CORE 회원등록 화면은 memberProfiles, 구매 감지 힌트, studiomateMembershipContracts, alimtalkCandidates·alimtalkSends를 읽기 전용으로 결합합니다. 이 화면에서 회원·수강권·계약서·알림톡 원장을 수정하지 않습니다.
  • 서명 대기는 조회 이력이 100건이어도 종료하지 않습니다. 기존 이력은 보존하고 최신 관찰을 별도 기록하며, 누락된 조회 예약은 제한된 순환 조회로 복구합니다. 일시적 조회 오류는 간격을 늘려 재확인하고, 회원·계약 연결 충돌은 확인필요로 보류합니다.
  • 늦게 발견한 서명은 StudioMate 계약 원본과 회원·발급번호·상품번호, 양측 서명과 실제 완료시각을 대조한 뒤 서명완료로 표시합니다. 서명 상태 확인과 웰컴 발송은 별개이며, 오래된 서명을 새 완료 이벤트로 바꾸거나 계약서·알림톡을 재발송하지 않습니다. 원천: studiomateMembershipContracts.signatureReceipt / 처리기: 회원목록 동기화의 계약 완료 확인. 2026.10.15 수정·원본·회귀 검증 완료. 운영 실행기와 CORE Hosting에 적용하는 승인된 규칙입니다.
  • 계약서·알림톡 원장은 Firestore 운영 권한과 동일하게 studioId 5330 범위로만 조회합니다. 새로고침은 이전 조회 오류 표시를 먼저 초기화한 뒤 원장을 다시 읽으며, 한 원본의 권한 오류를 정상 0건으로 표시하지 않습니다.
  • 확인필요는 자동 처리가 중단된 상태입니다. 결제·수강권 발급 시각, 회원구분, 계약서 원천 또는 기존 웰컴 발송 이력을 확인한 뒤 원인을 해결하며, 화면 조회만으로 계약서나 알림톡을 재발송하지 않습니다.
  • 과거 발송 링크, 제출 데이터, 서명 완료 PDF는 삭제하거나 신규 등록 흐름으로 덮어쓰지 않습니다. 삭제된 신규회원 웰컴 v3와 중단한 현장 웰컴 v5를 새 발송에 사용하지 않습니다.
  • CORE 홈탭은 alimtalkCandidates 실패, onsiteWelcomeRequests 오류, memberSignupContracts 후속 처리 오류를 함께 문제로 표시합니다.
  • 강사레슨의 강사회원 가입서와 이폼싸인 발송·완료 확인 절차는 이번 중단 대상이 아니며 기존대로 유지합니다.

StudioMate 가입·재등록 계약 전환

  • 2026-09-30 계약 감지 복구: 소수 회원의 수강권 기록 감소는 해당 회원만 확인필요로 분리하고, 다른 회원의 신규 발급은 계속 확인합니다. 회원별 마지막 정상 비교 시각을 보존하며, 이전 그룹 수 또는 수강권 행의 5%를 초과한 누락은 전체 원본 확인 전까지 차단합니다.
  • 미처리 발견 후보는 다음 시간당 실행에서 최대 5명씩 원본 재확인합니다. 후보만으로 발송하지 않으며 StudioMate 회원·발급 고유번호·전체 계약 이력과 발송 원장이 기준입니다. 생성·전송 결과가 불명확한 건은 자동 재전송하지 않습니다.
  • 회원·예약 원천 동기화와 계약 후속처리의 점검 상태를 분리합니다. 계약 오류는 확인필요로 표시하되 정상 예약 데이터를 오래된 데이터로 판단해 불필요하게 재수집하지 않습니다.
  • 발급 후 2시간을 넘긴 누락 계약은 일반 자동발송 범위를 늘리지 않고 운영자 승인된 회원·발급번호 1건만 복구합니다. 최대 7일 이내 발급의 현재 수강권·계약·공식 직인을 재검증하며, 기존 작업이 있으면 중단하여 중복 발송 여부부터 확인합니다. 회원의 동의·서명은 대신하지 않습니다.
  • 2026-09-23부터 StudioMate 재등록 전용 양식과 가입완료 웰컴 v6를 사용합니다. 기존 현장 웰컴 신규 접수는 종료했고, 신규 수강권 감지·계약서 작성·서명 완료 확인은 기존 시간당 회원목록 동기화에서 실행합니다.
  • 재등록 계약서 이름 · 2026-10-22: StudioMate 양식 1341의 이름과 새로 작성하는 계약서 제목은 ‘아카이브 재등록’으로 통일합니다. 원천은 StudioMate 전자계약 템플릿이며 맥미니 계약 작성기가 양식 번호·이름을 함께 검증합니다. 약관·필수항목·구매조건·서명 방식·발급 건별 중복방지는 유지합니다. 기존 작성·발송·서명 계약서는 수정하거나 재발송하지 않습니다. 양식 저장 후 원본 재조회, 무발송 회귀 검증, 운영 실행기 및 CORE Hosting 반영 결과를 배포 기록으로 확인합니다.
  • 목표 흐름은 StudioMate 회원·수강권 등록 후 계약서 작성입니다. 체험·1회성·강사레슨·스텝용·증정 수강권은 제외합니다.
  • 2026-09-20 회원구분 기준: 일반 회원 등급만 계약 자동화 대상입니다. 강사회원·스텝·체험회원·상담회원은 수강권 종류와 관계없이 제외하며, 새로 등장한 미확인 등급은 자동 발송하지 않고 확인필요로 보류합니다.
  • 재등록 감지 보강 · 2026-10-22: StudioMate의 전체 발급·계약 이력에서 과거 유상 정규 구매를 확인해 재등록을 판정합니다. 적용일 이전 가입자도 새 정규권은 독립적인 재등록 계약 대상이며 과거 서명을 대신하거나 소급하지 않습니다. 상품명 변경은 새 발급번호를 놓치는 이유가 되지 않습니다. 폐기 상품 중 원본으로 확인한 정규 상품번호는 과거 구매 확인에만 사용하고 신규 발송 상품 목록은 늘리지 않습니다.
  • 10월 누락 복구: 운영자가 승인한 10월 발급 건만 최신 엑셀·원본 회원·전체 수강권·계약·발송 원장으로 재확인합니다. 일반 자동화의 2시간 기준과 시간당 주기는 유지합니다. 같은 발급 건에 기존 계약이 있거나 응답이 불명확하면 새로 보내지 않습니다. 미확인 등급·필수정보 누락·취소·환불·만료는 보류하고 체험·강사레슨·직원·증정·연장·상품권은 제외합니다. 김기효 단건 테스트는 별도 고정 키와 테스트 문구로 분리하며 일반 회원 자동화의 예외가 되지 않습니다. 원천은 StudioMate 회원·발급·전자계약, 원장은 studiomateMembershipContractJobs·studiomateMembershipContracts입니다. 재등록에는 신규회원 웰컴을 보내지 않습니다. 구현·테스트·운영 연결·배포 상태는 릴리스와 승인 복구 보고서로 구분합니다. 남은 조치: 본인 서명 및 보류 원본정보 확인.
  • 야외·1회권과 회원등록 집계 · 2026-10-27: 야외수업권은 체험·1회권과 같이 일반 신규·재등록 전자계약과 신규회원 웰컴에서 제외합니다. 원본 상품 ID 허용목록을 유지하고 원본 수강권명도 확인합니다. 같은 회원이 일반 수강권을 함께 보유하면 해당 일반 발급 건은 독립 판정하며 회원 전체를 제외하지 않습니다. Excel 변경 감지만 있는 기록은 감지보류로 분리하고 계약 생성 예정이나 진행중으로 확정하지 않습니다. 이미 생성된 계약·서명·발송 이력과 확인필요 상태는 보존합니다. 정본은 원본 발급·계약과 기존 계약/발송 원장이며 workLanes 감지는 발송 원천이 아닙니다. 구현·무발송 검증과 CORE 화면 반영을 완료했으며 10/27 확인 결과는 진행중 7명·감지보류 70명·확인필요 5명·완료 7명입니다. 서버·실행기 배포 근거는 2026-10-27-outdoor-membership-exclusion 보고서 및 릴리스로 확인합니다. 당시 10/29까지 설정한 서명 보류는 아래 10/28 원본 정상화 확인 및 운영자 승인에 따라 해제하며, 기존 계약의 수동 재발송과 무승인 자동 재개는 계속 금지합니다.
  • 전자계약 재개 · 2026-10-28: StudioMate 공지 224의 10/23 15:30 서명 기능 정상화와 실제 계약 화면을 확인하고 운영자 승인으로 재개합니다. 보류 기간 일반 구매 후보 5명의 정확한 감지 ID·원본 회원·발급 구간만 승인 후 24시간 동안 기존 시간당 실행에서 우선 재검증하며, 원본 7일 이내 발급에만 제한된 복구 기준을 적용합니다. 일반 2시간 기준·실행 주기·대상 제외는 유지합니다. 현재 회원·수강권·결제·전체 계약과 영구 발급별 선점이 통과해야 새 요청을 만들며, 기존 계약·서명완료·환불·취소·불명확 전송은 재생성·재발송하지 않습니다. 기존 요청대기 6건은 원래 계약·만료시각을 유지합니다. 만료 1건은 별도 승인·원본 대조 후 21:46에 같은 계약으로 1회 재요청하여 원본 전송 성공과 11/4 21:46 기한을 확인했습니다. 최초 선택·발송 이력은 보존하고 재요청 영수증은 서명 관찰에만 사용하며, 같은 계약의 추가 자동 미서명 문자는 차단합니다. 24시간 미서명 문자는 계약별 1회, 09:00~19:59이며 최종 확인 직전에도 20시 경계를 검사합니다. 새 서명요청은 09:00~22:59로 제한합니다. 정본: StudioMate 원본 및 studiomateMembershipContractJobs·studiomateMembershipContracts, 승인: membershipContractAutomation.signatureMaintenanceRecovery. 처리기·운영 설정·CORE 배포와 실제 접수 결과는 2026-10-28-signature-maintenance-resume 보고서로 구분하며 휴대폰 전달·회원 본인 서명은 접수와 별도입니다.
  • 센터 직인 확인 보류 · 2026-10-28 22:09: 재개 후 첫 정기 실행에서 승인된 5개 계약 초안은 생성됐으나 직인 저장 확인이 실패해 신규 서명요청은 0건입니다. 원본 초안의 센터 서명이 비어 있고 현재 불러올 등록 서명도 없습니다. 기존 자동 저장 경로의 실패 원인은 추가 확인 중이며 과거 저장 서명의 삭제를 의미하지는 않습니다. 신규 작성기를 중지하고 정확한 기존 초안·발급별 선점·실패 이력을 보존합니다. 계약 재생성·직인 무조건 재시도·회원 재발송은 금지합니다. 기존 공식 직인의 센터 서명 적용은 별도 확인 후 해당 초안에서만 진행하고 회원 본인 서명·동의는 대신하지 않습니다. 방지현 기존 계약 1회 재요청의 원본 전송 성공과는 별개입니다. 원천: 정기 실행 2026-10-28T13-09-52-000Z·studiomateMembershipContractJobs 및 원본 계약 화면. 현재 상태: 미발송 5건·공식 직인 적용 확인 대기. 다음: 확인 후 현재 원본·중복을 재검증하고 09:00~22:59에만 처리합니다.
  • 이번 복구 발송시간: 2026-10-22 01:55에 테스트 1건과 검증된 재등록 7건의 서명요청이 접수됐으며 본인 서명과 휴대폰 최종 전달은 별도입니다. 이후 확정된 최우선 공통규칙에 따라 추가 복구와 실제 전화번호 테스트도 매일 23:00~09:00 전에는 차단합니다. 이미 접수한 7건은 09:00에 다시 보내지 않습니다. 필수정보 누락 2명은 운영자 요청으로 보류합니다. 기존 정기 감지 주기는 변경하지 않습니다.
  • 엑셀은 확인 후보만 찾습니다. 발급 고유번호·상품번호·결제·서명 이력을 StudioMate 원본과 대조하기 전에는 발송하지 않습니다. 같은 발급 건은 한 번만 처리합니다.
  • 계약 자동화는 정규 수강권 발급을 기준으로 진행합니다. 완납·일부결제·미수 여부는 계약서의 결제금액과 미수금에 그대로 표시하되 계약서 작성·서명 완료·신규회원 웰컴 발송을 중단하는 조건으로 사용하지 않습니다.
  • 회원 구매이력 엑셀의 과거 행만 변경되고 StudioMate 원본에 새 수강권 발급이 없으면 오류가 아니라 처리 대상 아님으로 종료합니다. 카드·현금·계좌이체와 함께 사용한 포인트도 결제 총액과 계약서 포인트 금액에 포함합니다.
  • 센터 서명은 Git 밖의 전용 경로에 보관한 승인된 ARCHIVE PILATES 공식 직인만 사용합니다. PNG 형식·크기·권한·해시 검증을 통과해야 하며, 회원 서명과 동의는 본인이 직접 작성합니다.
  • 2026-09-14 21:13 KST 승인 테스트 1건에서 새 계약서 직인 저장·새로고침 유지·LMS 서명요청 후 본인 서명을 완료했습니다. 센터·회원 서명 이미지와 필수 3개 약관 동의가 확인됐고, 수강권은 1건, 결제는 미수금 ledger 1건 + 카드 정산 1건으로 중복 없이 수납됐습니다.
  • 전자계약 미서명 문자 · 2026-10-20: 검증된 최초 서명요청 확인시각부터 24시간이 지나도 미서명이면 같은 계약에 StudioMate 문자를 1회 요청합니다. 실제 발송시각이 없는 기록을 생성·수정시각으로 추정하지 않습니다. 기존 시간별 정상 Excel 동기화의 계약 확인 단계에서 09:00~19:59에 처리하며 야간은 다음 주간 실행으로 미룹니다. 발송 직전 원본 회원·연락처·수강권과 전자계약의 미서명·미취소 상태를 다시 확인합니다. 서명완료·환불·취소·대상 불명확·수신자 불일치는 보내지 않습니다. 발송 시도 후 응답 불명확은 확인필요로 두고 재시도하지 않습니다. 원천은 studiomateMembershipContracts의 계약별 signatureReminder이며 member360이나 화면 집계는 발송 원천이 아닙니다. CORE의 문자 접수는 휴대폰 전달 완료와 별개입니다. 수동 새로고침·정확한 계약 단건 조회·테스트 실행은 발송하지 않습니다. 계약 재생성·계약서 재발송·웰컴 정책은 변경하지 않습니다. 운영 반영·검증 결과는 해당 배포 보고서에 기록합니다.
  • 전자계약 직인 조회 보강 · 2026-10-20: 미서명 요청대기 계약도 센터 직인 이미지가 실제로 로딩된 뒤 검증합니다. 이미지 로딩 중을 직인 누락으로 판단하지 않으며, 제한시간 내 확인 실패는 구체적인 원인으로 보류합니다. 같은 계약의 발송 시도 기록은 보존하고 접수 불명확 건은 재발송하지 않습니다. 원천: StudioMate 원본 계약·회원·수강권 및 studiomateMembershipContracts. 처리기: 기존 시간별 계약 확인. 두 계약의 원본 무발송 검증 4회를 통과했습니다. 실제 문자 접수·전달은 계약별 원장으로 별도 확인하며, 운영 적용·Hosting 배포 결과는 배포 보고서에 기록합니다.
  • 문자 작성 화면 확인 · 2026-10-20: StudioMate 회원 상세의 실제 화면에서 이름과 전체 연락처가 준비된 뒤 문자 작성창을 엽니다. 원본 검증·회원 화면·수신자·최종 확인창 실패를 구분해 보고하며, 원본이 정상이어도 문자 화면 확인에 실패하면 보내지 않습니다. 두 계약의 실제 화면에서 최종 전송 직전까지 무발송 검증을 완료했습니다. 최종 전송·접수·전달은 별도 결과이며 기존 계약별 1회 선점과 불명확 결과 재발송 금지는 유지합니다.
  • 웰컴은 신규 정규회원의 계약서 본인 서명 완료 후 1회입니다. 재등록·체험·1회성·강사레슨·스텝·증정은 제외하고, 구버전 웰컴 이력까지 전화번호와 병합된 회원 기록으로 중복 확인합니다.
  • 2026-10-19 웰컴 이력 분류 보강: 그룹 첫 수업 사전설문은 웰컴 발송 이력이 아닙니다. SOLAPI 원본의 ID·채널·승인 상태·본문·이미지·버튼을 검증한 정확한 비웰컴 ID만 별도 감사 목록에 등록합니다. 알 수 없는 양식이나 누락·불완전 이력은 계속 보류하며, 구버전 웰컴·접수 불명확·선점·중복 차단은 유지합니다. 확인필요 해제만으로 즉시 발송하지 않고 계약·회원·수강권 원본을 새로 확인한 뒤 기존 큐로 처리합니다.
  • 웰컴 발송대기 표시 · 2026-10-22: 회원등록 화면은 최근 일반 알림톡 목록에서 누락된 과거 웰컴도 계약별 영구 후보 ID로 후보·발송 원장을 직접 확인합니다. 발송 전 읽기 검증에서 중단된 건은 확인필요로 구분하며, 실제 전송 시도 횟수를 늘리거나 발송 실패 원장을 새로 만들지 않습니다. 전송 선점 이후의 불명확 결과와 과거 실패 기록·횟수는 보존하고 자동 재시도하지 않습니다. 원천: studiomateMembershipContracts·alimtalkCandidates·alimtalkSends·membershipWelcomeClaims. 상태 정정·화면·서버 보강은 이번 릴리스에 적용하며 무발송 회귀 검증을 통과했습니다. 오래된 서명·미분류 템플릿·불완전 이력은 별도 검토합니다.
  • 회원등록 확인필요 정리 · 2026-10-22: 과거 서명 건의 웰컴 복구는 운영자가 승인한 정확한 회원·계약만 원본 회원·수강권·결제·양측 서명과 전체 발송 이력을 재검증하여 1회 처리합니다. 실제 서명시각과 기존 실패·시도 이력을 보존하고 같은 영구 후보·전화번호·회원 별칭 선점으로 중복을 차단합니다. 일반 자동발송의 24시간 제한과 주기는 유지합니다. 예약오픈·프라이빗 설문·수업 리포트는 원본의 승인·본문·이미지·버튼을 별도 검증한 정확한 양식만 비웰컴으로 분류합니다. 기존 회원은 가입시각·과거 발급 이력 근거로 신규 웰컴 대상 제외를 기록하며 발송완료로 꾸미지 않습니다. 필수정보 누락·회원 본인 미서명은 계속 확인필요입니다. 원천: StudioMate 실시간 회원·전체 발급/계약 이력 및 canonical 계약·후보·발송·선점 원장. 승인된 단건 복구와 이력 분류를 운영 반영했으며, 이번 릴리스는 화면과 정기 처리기의 완료·제외 상태 보존을 적용합니다. 추가 발송·계약서 재발송·회원정보 추정은 하지 않습니다.
  • 가입완료 웰컴 v6는 2026-09-23 SOLAPI 재조회에서 APPROVED 상태입니다. 기존 로고 이미지와 이용안내·예약방법 버튼을 유지하고 가입서 작성 버튼은 제외했습니다.
  • 2026-09-23 김기효 테스트 수신자의 신규 테스트 회원·수강권·계약서 흐름으로 v6를 1회 격리 발송해 SOLAPI 전달 완료를 확인했습니다. 김기효 계정은 스텝이므로 일반회원 계약 자동화 대상에는 포함하지 않습니다.
  • StudioMate 원본의 회원·발급번호·상품번호·기간·결제·전체 계약 이력을 읽고, 신규 계약서 작성·공식 직인·LMS 서명요청·서명 완료 확인까지 연결했습니다. 전송 결과가 불명확하면 자동 재시도하지 않습니다.
  • 웰컴 후보가 만들어지면 기존 30초 운영 큐가 해당 계약 1건의 원본만 다시 확인합니다. 후보 생성 이후 확인한 원본이며 12분 이내인 경우에만 발송하고, 계약서에 복사된 금액으로 환불·미수 상태를 대신 판단하지 않습니다.
  • 정규 수강권 상품번호 허용목록 23개와 일반회원 Live E2E를 확인해 일반회원 운영 모드로 승격했습니다. 강사회원·스텝·체험·상담·1회성·증정·보상 상품은 자동 계약과 웰컴에서 제외하고, 기존 가입서 이력과 강사회원 이폼싸인 흐름은 보존합니다.

과거 가입서 제출·PDF 후속 확인

  • 기발송 링크와 memberSignupContracts의 제출 원본은 유지합니다. 신규 접수 중단과 과거 제출 건의 후속 처리를 구분합니다.
  • 서명 완료 PDF는 home@archivepilates.com Google Drive 가입서 PDF 폴더에 저장합니다.
  • PDF 저장 실패는 회원 제출을 실패시키지 않고 재처리 상태로 남깁니다.
  • 서명완료 가입서 PDF 폴더와 미해결 제출·PDF 오류의 후속 확인은 유지합니다.

과거 제출 건의 StudioMate 반영

  • 과거 제출 건의 주소, 생년월일, 성별은 StudioMate 회원정보란 반영 여부를 확인합니다. 신규 회원등록 자동화가 완료되었다는 뜻은 아닙니다.
  • 회원가입 정보는 StudioMate 메모란에 자동으로 쓰지 않습니다.
  • 반영은 studiomateMemberProfileWriteJobs 큐를 통해 Mac mini Playwright가 처리합니다.
  • 기존 memo write queue에 회원가입서 메모 작업이 남아 있으면 skipped로 처리합니다.

강사회원 가입서

  • 수강대기 · 2026-10-30 배포·검증 완료: 수동 수강등록에서 수강대기를 선택하면 미입금 대기명단만 저장합니다. 날짜별 대기 인원·접수순 명단은 확정 인원과 분리하며 정원·잔여석·홈페이지 구매 가능 인원을 차감하지 않습니다. 회원 생성·수강권·가입서·메모·확정 안내 작업은 생성하지 않고 자동 승급·발송도 하지 않습니다. 결원 발생 후 운영자가 같은 연락처·날짜로 정규/팀 접수를 명시하고 입금·좌석을 새로 확인해야 확정 처리하며 대기 이력을 보존합니다. 정본은 instructorLessonRegistrations의 스튜디오·연락처·날짜 고정키이며 중복 접수·기존 유료 접수의 대기 전환을 차단합니다. 전체 연락처는 관리자 명단에서만 확인합니다. 적용 대상은 CORE 접수·일정·명단, 등록/조회/확정 함수와 기존 맥미니 실행기이며 새 예약 작업은 없습니다. 관련 함수 9개·CORE 화면·실행기를 반영하고 모바일/PC 무발송 테스트, 운영 파일 일치, 기존 인원·정원·접수 상태 보존과 GitHub 검사를 확인했습니다. 실제 대기자 등록·회원 발송 테스트는 하지 않았습니다. 상세 증거는 2026-10-30-instructor-lesson-waitlist 보고서에 있으며 다음 조치는 결원·입금 확인 후 운영자의 명시적 확정 접수입니다.
  • 기존 가입서·팀레슨 정원 연결 · 2026-10-29: 완료 가입서의 정확한 문서·템플릿·실제 단일 수신자와 현재 원본 회원이 일치할 때만 기존 가입서를 연결합니다. 무료권을 유료 결제로 바꾸거나 가입서·확정 안내를 다시 보내지 않습니다. 11/20 일정은 원본에서 재확인한 두 수업을 기존 lectures 정본 형식으로 제한 반영하며, 회원·예약 원본은 변경하지 않습니다. 팀레슨은 최초 시작시간과 순차 회차를 검증하고 회차별 정원 중 최소값을 사용합니다. 동시 진행 룸만 합산하며, 누락·충돌·정원 불명은 확인필요를 유지합니다. 적용 대상은 CORE 일정 조회 함수와 이 안내이며 실제 원본 연결·배포·검증 결과는 2026-10-29-instructor-signup-capacity-repair 보고서를 따릅니다.
  • 팀레슨 일정 표시 · 2026-10-29: CORE 강사레슨에서 11/20·11/21은 청록색 팀레슨, 일반 일정은 흰색 정규레슨으로 구분합니다. 11/20 전체 시간은 14:00~15:50이며 명단 제목에도 표시합니다. 원본 시간 충돌은 확인필요로 남깁니다. 날짜별 표시 정보는 수강권·예약·정원·취소·발송 분류를 바꾸지 않습니다. 원천은 기존 일정/접수 정본이며 대상은 CORE 화면과 이 규칙입니다. 무발송 화면 회귀·반응형 검증 후 이 문구가 포함된 Hosting 릴리스부터 적용하며 실제 배포·라이브 확인은 2026-10-29-team-schedule-display 보고서를 따릅니다.
  • 11/20 팀레슨 최종 검증 · 2026-10-29 20:50: 기존 접수 6명 모두 Team 당일 2회권·8만원 계좌이체 원본이 각 1건입니다. 신규 가입서 5건은 실제 수신자와 유효한 요청대기를 확인했으며 회원 작성 대기입니다. 하언진님은 기존 완료 가입서·동일 문서의 synced/done 정보 반영 기록을 재사용했고 재발송하지 않았습니다. 확정 알림톡은 20:49~20:50 각 1회 접수됐고, 20:50 동일 메시지 ID·수신자·승인 템플릿·일정/주제/문구를 SOLAPI COMPLETE/4000과 대조했습니다. 20:50은 조회 확인시각이며 제공자 완료시각으로 단정하지 않습니다. CORE는 가입서 대기 5건과 하언진 완료를 구분합니다. 기존 문구 발송·D-1 별도 준비는 사용자가 승인했으며 D-1 자동발송은 활성화하지 않았습니다. 앱 함수 5개·CORE 단계 표시·Team 전용 캘린더를 배포했고 날짜별 캘린더 검사 오류를 보완해 GitHub 검사 통과를 확인했습니다. 원본 예약·다른 수강자·기존 주기는 유지했습니다.
  • 2026-10-29 팀레슨 후속 처리: 11/20 14시 접수 6명은 승인 범위에서 원본 회원·Team 당일 2회권·8만원 계좌이체·기존 가입서·전체 안내 이력을 확인해 이어갑니다. 일반 2T 처리기로 분류를 바꾸지 않습니다. 기존 가입서는 전체 연락처·완료 문서와 대조해 재사용하며 진행 중·결과불명 요청은 다시 보내지 않습니다. 가입서 요청, 회원 작성 완료, 정보 반영, 안내 접수와 최종 전달은 별개 단계입니다. CORE는 실제 단계만 표시하고 일반 자동발송·재시도는 계속 차단합니다. 정본은 instructorLessonRegistrations/eformsignInstructorMemberJobs/memberMemos/alimtalkCandidates/alimtalkSends이며 전송 전 단일 선점, 09~23시 및 기존 주기를 유지합니다. D-1 배정·큐카드는 별도 자료·샘플 승인 절차가 필요하며 이번 작업이 D-1 자동발송을 활성화하지 않습니다. 구현·검증·배포와 실제 완료/대기는 2026-10-29-team-instructor-fulfillment 보고서에서 구분합니다.
  • 팀레슨 반영·검증 완료 · 2026-10-29: 팀레슨 분리 접수 기능과 관련 앱 5개·알림톡 4개 함수, CORE 화면을 배포했습니다. 무발송 회귀·모바일 320/390px·태블릿·PC 검증 및 GitHub Functions/MCP 검증을 통과했습니다. 11/20 14:00 ARCHIVE METHOD #1 직장인 증후군 6명, 1인 80,000원·총 480,000원·계좌이체 접수를 저장하고 정본과 라이브 명단을 대조했습니다. 기존 11/21·28·29 인원은 유지됐으며 이번 접수의 발급·이폼싸인·메모·알림톡 작업 생성은 0건입니다. 수강권·가입서·안내는 아직 확인 대기이며, 다음 조치는 원본 일정·정원·회원 및 기존 문서 대조입니다. 이 기록은 회원 서명이나 안내 발송 완료 증거가 아닙니다.
  • 2026-10-29 팀레슨 접수 분리: CORE 접수에서 팀레슨을 선택하면 날짜·시작시간·주제·1인 결제금액·결제수단과 운영자 결제/접수 확인을 정본 instructorLessonRegistrations에 보존합니다. 같은 연락처·수강일의 기존 키를 유지하며 과정·금액·시간·주제가 다르면 자동 덮어쓰지 않습니다. 결제완료 접수는 명단에 즉시 포함하지만 정원 원본이 없으면 잔여석을 확정하지 않습니다. 팀레슨 접수는 확인필요 상태이며 일반 2T 발급·이폼싸인·메모·확정 안내 작업을 만들지 않습니다. 원본 일정·회원·기존 수강권·가입서·중복 안내를 별도 검증하기 전에는 발급·서명·발송 완료로 표시하지 않습니다. 일반 2T 과정과 기존 수강자는 유지합니다. 적용 함수는 operatorCreateInstructorLessonRegistration/getInstructorLessonRegistrationDashboard, 화면은 CORE 강사레슨입니다. 배포·실제 접수 검증 상태는 해당 2026-10-29 팀레슨 작업 보고서와 CORE release.json을 확인합니다.
  • 강사레슨 등록키는 StudioMate 스튜디오, 정규화된 휴대폰번호, 수강일로 고정해 같은 신청의 중복 처리를 막습니다.
  • 입금과 수강 접수를 확인한 뒤 CORE 강사레슨 메뉴에서 이름, 휴대폰번호, 수강일, 결제수단을 등록합니다.
  • 홈페이지 오프라인 강사레슨 상품 1번은 기존 Mac mini 등록 작업이 10분 간격으로 주문 원본을 확인합니다. 2026-09-27 21:22 이후 결제, 1인·미래 수강일·70,000원 결제 완료·정원 검증이 끝난 주문만 자동 접수하며, 온라인 영상 상품과 이전 결제는 제외합니다.
  • 2026-10-05 알림 규칙: 주문 원본의 일시적 네트워크·429·5xx 조회 오류는 3회 연속 실패 시 메일로 알립니다. 정상 전체 조회·접수 처리와 확인필요 건 해소 뒤, 실패 알림을 보냈던 경우에만 복구를 1회 알립니다. 인증·원본 불일치·접수 실패는 즉시 알리고, 수동 단건 조회나 실행 생략은 전체 복구로 판단하지 않습니다.
  • 2026-10-11 조회 보강: 주문 목록·단건 조회에서 확인된 네트워크·429·5xx 오류만 0.5초 후 1회 재확인합니다. 실패 응답은 종료코드가 정상이더라도 접수하지 않습니다. 전체 주문 조회가 불완전하면 신규 접수를 시작하지 않으며, 인증·권한·원본 불일치·응답 해석 불가는 즉시 확인필요입니다. 실행 보고서·관제·오류 알림에 조회 단계·상태코드·조회 시도 수만 남기고 개인정보·인증정보·원문 응답은 저장하지 않습니다. 회원 생성·수강권 발급·알림톡 재전송과 10분 주문 확인 주기는 변경하지 않습니다.
  • 2026-09-28 결제구분 변경: 홈페이지 강사레슨 결제는 토스페이 등 결제수단과 관계없이 StudioMate에 신용카드로 기록합니다. 실제 결제수단은 주문 원본과 접수 기록에 별도 보존합니다. 이는 내부 분류이며 실제 결제수단을 변경하거나 재결제하지 않습니다.
  • 홈페이지 주문번호·품목과 연락처·수강일을 함께 대조합니다. 기존 수동 접수·수강권, 복수 인원, 할인·포인트, 정원 초과는 확인필요입니다. 결제수단만으로 보류됐고 발급 작업이 없는 건은 원본·정원을 다시 확인해 접수합니다. 불확실한 발급은 재시도하지 않으며 주문 변경·취소 시 자동 발급·안내를 보류합니다. 이미 발급된 수강권은 자동 삭제하지 않습니다.
  • 2026-10-26 다인 주문 공동 승인: 복수 인원은 자동 승인하지 않습니다. 운영자가 실제 수강자·전체 결제·개인별 70,000원·수강일·정원을 확인한 경우에만 기존 등록키를 보존해 공동 접수합니다. 구매자 정보를 동반 수강자에게 복사하지 않습니다. 정본은 아임웹 주문 원본, 공동 승인 원장과 각 강사레슨 등록 건입니다.
  • 공동 승인키·수강자·금액이 모두 일치해야 기존 수강권 검증과 확정 안내를 진행합니다. 주문 변경·환불 또는 한 명의 취소·등록 누락·정보 불일치 시 해당 주문의 남은 발급·가입서·안내를 함께 보류합니다. 이미 발급된 수강권은 자동 취소하지 않으며, 접수·결과 불명 발송은 재전송하지 않습니다. 복구에는 원본 재확인과 별도 운영자 판단이 필요합니다.
  • 2026-10-27 확정 안내 검증 보완: 원본 화면에서 수강권 식별번호를 제공하지 않으면 빈 값 표기 차이만으로 불일치 처리하지 않습니다. 이름·수신자·수강일·수강권 발급 검증과 공동 승인키는 계속 확인하며, 알려진 식별번호가 다르거나 한쪽만 있으면 보류합니다. 회원·수강권이 모두 검증된 뒤 가입서·메모·확정 안내의 후속 오류만으로 확인필요가 된 등록은 다른 수강자의 안내까지 막지 않습니다. 주문 변경·환불·취소·신원·금액·승인 오류는 여전히 공동 차단합니다. 기존 접수·결과 불명 발송은 재전송하지 않으며 배포와 실제 전달 결과는 해당 검증 보고서에서 구분합니다.
  • 2026-10-28 발급 검증·가입서 복구: 수강권 발급 응답의 원본 고유번호를 화면 검증 전에 접수 증거로 보존합니다. 화면에 동일 수강권이 겹쳐 보이면 숨김·중첩 표시를 제외하고 새로 읽는 확인만 한 번 하며, 실제 중복이나 결과 불명은 보류합니다. 기존 발급 증거가 있으면 새 수강권을 만들지 않습니다. 다인 주문의 신원·금액·승인·취소·환불 검증과 회원별 처리 대기를 구분합니다. 같은 주문의 처리 대기는 가입서 발송 실패 횟수를 소비하거나 결제 승인을 해제하지 않으며 기존 작업에서 5분 뒤 재확인합니다. 실제 원본 변경·취소·불일치는 계속 공동 차단합니다. 단건 복구는 운영자가 승인한 기존 등록키·단계에 한정하고 최신 주문·원본 수강권·문서함을 다시 확인합니다. 접수·결과 불명 전송은 재요청하지 않으며 기존 확정 알림톡·발송키·이력과 야간 금지시간을 유지합니다. 정본은 아임웹 주문·StudioMate 발급 고유번호와 instructorLessonRegistrations·각 발급/가입서 작업 원장입니다. 복구 전 상태는 접근 제한 감사기록으로 보존하며 workLanes는 발송 원천으로 쓰지 않습니다. Mac mini 실행기·CORE 규칙만 반영하고 Functions·일반 전자계약 보류·실행 주기는 변경하지 않습니다. 구현·무발송 검증·배포와 실제 복구 결과는 2026-10-28-instructor-registration-recovery 보고서 및 릴리스에서 구분합니다. 다음: 가입서 본인 작성·완료와 원본 연계를 기존 정기 작업으로 확인합니다.
  • 2026-10-29 신규 강사회원 발급 연결 복구: 발급 응답을 해석하지 못해도 미발급으로 단정하거나 재발급하지 않습니다. 운영자가 현재 결제 주문·전체 원본 수강권의 유일한 고유번호·신원·발급시각·금액과 가입서 진행/완료 문서 부재·안내 원장을 대조한 경우에만 같은 발급 작업에 연결합니다. 신규 가입서·메모 단계를 재수강의 해당 없음으로 바꾸지 않으며 기존 시도 이력·발송시간·중복방지를 보존합니다. 원본 재확인 후 기존 정기 처리기로 후속 절차를 재개하고 수동 수강권 발급·알림톡 재발송은 하지 않습니다. 발급 응답의 상태·구조만 개인정보 없이 남기며 알 수 없는 응답 구조를 추정해 고유번호로 쓰지 않습니다. 원천은 현재 아임웹 주문·StudioMate 원본·canonical 등록/발급/가입서/안내 원장이고 접근 제한 감사기록은 쓰기 대상 원천이 아닙니다. Mac mini 실행기·CORE 규칙에 반영하며 Functions·보안규칙·주기는 유지합니다. 검증·실제 복구·후속 발송 결과는 2026-10-29-core-meal-lesson-check 보고서에서 구분합니다.
  • 2026-10-29 기존 수강권의 접수·안내 누락 점검: StudioMate에서 직접 발급한 강사레슨 수강권이 명단에 보여도 CORE 접수·안내 원장이 자동 생성된 것은 아닙니다. 기존 시스템 점검은 미래 수강권과 같은 회원·수강일의 접수 연결 누락을 확인필요로 알리며 미발송 확정이나 발송 승인으로 해석하지 않습니다. 복구는 현재 원본의 유일한 수강권·신원·실제 결제·취소와 전체 안내 이력을 재확인한 운영자 승인 건만 기존 등록 원장에 연결합니다. 기존 유료 재수강 증거가 없는 신규·무료·스텝·별도 Team 과정은 일반 유료 2T로 추정하지 않습니다. 수강권·회원·가입서 재발급 없이 기존 안내 처리기를 사용하고 접수·전달·서명 완료를 구분합니다. 09~23시 발송·중복차단·취소 규칙과 기존 실행 주기는 유지합니다. 원천은 StudioMate 현재 수강권/결제·최신 Excel과 canonical 등록/후보/발송 원장이며 저장 프로필은 누락 점검용입니다. 조회 상한·원본 지연·동명이인·신원 충돌은 정상으로 처리하지 않습니다. 구현·검증·운영 반영 및 남은 보류는 2026-10-29-november-instructor-confirmation 보고서에서 구분합니다.
  • 야간(23:00~익일 09:00 전) 공동 접수는 저장·검증만 하며 회원 생성·수강권 발급·회원 안내는 다음 허용시간 이후 기존 작업기가 원본·중복을 재검증해 처리합니다. 별도 발송 예약기나 수동 재실행을 만들지 않습니다. 구현·무발송 검증과 운영 배포 상태는 배포 보고서에서 구분하며, 실제 발급·발송 완료는 각 원장으로 확인합니다.
  • 홈페이지 결제는 재청구하지 않습니다. 주문 원본 금액을 StudioMate 수강권 결제기록과 가입서에 연결하고 CORE 수강권 단계에 주문번호를 남깁니다. 홈페이지 매출과 StudioMate의 같은 구매기록을 합산하지 않습니다. 반배정·수업 예약은 계속 수동입니다.
  • StudioMate는 휴대폰번호 정확 일치로 판정합니다. 신규이면 강사회원 생성과 강사레슨 (2T) 발급 뒤 가입서를 발송합니다.
  • 수업이 아직 없어도 수강권 발급을 진행합니다. 홈페이지 접수는 기존 수업·수강권·접수의 정원을 확인하며, 반배정·예약은 운영자가 직접 처리합니다. 자동화는 예약 API를 호출하지 않습니다.
  • 기존 강사회원이면 강사레슨 (2T) 수강권까지만 발급하고 가입서는 다시 보내지 않습니다. 일반회원 또는 중복번호는 확인필요로 중단합니다.
  • 반배정과 예약은 수업 생성 시 운영자가 StudioMate에서 직접 처리합니다. 수동 예약 뒤 기존 D-1 예약 안내 자동화가 예약 원천을 사용합니다.
  • CORE 일정별 예약현황은 읽기 전용입니다. 해당 수업일의 현재 활성 강사레슨 (2T) 수강권 발급 고유 인원을 우선하고, 회원 프로필 미러 반영 전이라도 접수 원장에서 수강권 발급 검증이 끝난 회원은 즉시 합산합니다. 같은 전화번호는 한 번만 세며, 수강권 데이터가 없을 때만 실제 활성 예약, 그 전에는 취소되지 않은 접수 인원을 사용합니다.
  • 수강권 발급 인원은 누적 수강일 기록이 아니라 현재 활성 강사레슨 (2T) 수강권의 시작일로 계산합니다. 스텝·운영자도 실제 수강권이 발급되면 좌석에 포함하며, 알림톡 스텝 제외 규칙과 좌석 집계 규칙은 분리합니다.
  • 김기효 신규회원 E2E처럼 newMemberSimulation으로 표시한 합성 테스트는 접수·완료·좌석 카운트에서 제외하고, 테스트 종료 후 StudioMate 수강권·메모와 Firestore 테스트 문서를 정리합니다.
  • 강사레슨은 5:1 두 팀 운영 기준으로 기본 정원은 10명입니다. 실제 수업에 신뢰 가능한 정원이 있으면 같은 시작 시간의 병렬 수업 정원을 합산하고, 남은 좌석은 정원에서 수강권 발급·예약·접수 중 적용 원천의 고유 인원을 뺀 값으로 표시합니다.
  • 2026-10-11 좌석 집계 보강: 예약 조회에 Team 강사레슨도 포함합니다. 같은 회원의 연속 수업은 한 명으로 세고, 연속 수업 정원은 합산하지 않습니다. StudioMate 수업 상세에서 확인한 정원은 해당 수업의 스튜디오·날짜·시작/종료시각·제목·강사·룸이 일치할 때만 사용하며, 엑셀의 빈 정원으로 지우지 않습니다. 이 정원 기록은 화면 집계용이며 수강권 발급·예약·알림톡 대상 선정에는 사용하지 않습니다.
  • 좌석 현황 조회는 StudioMate 예약 생성·변경·취소를 실행하지 않습니다.
  • 이폼싸인 Personal 요금제는 API 대신 전용 Playwright 큐를 사용합니다. 최종 발송 결과가 모호하면 자동 재발송하지 않고 확인필요로 남깁니다.
  • 강사회원 가입서 24시간 미작성 문자 · 2026-10-30: 검증된 최초 이폼싸인 요청 발송시각부터 24시간이 지나도 작성·서명이 완료되지 않은 유효 문서에 StudioMate 안내 문자를 문서별 1회만 요청합니다. 기존 10분 가입서 확인 처리기를 사용하며 새 예약 작업·계약서 재발송·확정 알림톡 재발송은 만들지 않습니다. 발송 직전 원본 단일 수신자·유효기한·현재 강사회원·해당 수강권·결제·취소/환불·전체 동일 문서 작업의 선점을 다시 확인합니다. 원본 누락·불일치·만료는 보류하며 접수·시도·결과불명 기록은 자동 재발송하지 않습니다. 회원 문자는 기존 서명 안내의 더 엄격한 09:00~19:59에만 보내고 실제 HTTP 요청 직전에도 시간을 확인합니다. 시간 밖이면 다음 허용시간의 기존 정기 실행에서 다시 검증합니다. 문자에는 기존 이폼싸인 요청 문자에서 작성하도록 안내하며 관리자 열람 링크나 개인정보 답변을 넣지 않습니다. 정본은 eformsignInstructorMemberJobs와 instructorLessonRegistrations, 외부 증거는 이폼싸인 진행 상태·StudioMate 회원/수강권 및 같은 문자 접수 ID입니다. signatureReminder의 접수·최종 전달·가입서 완료는 별도이며 기존 가입서 상태와 최초 발송 이력을 보존합니다. 구현·운영 반영·무발송 검증·실제 접수 여부는 2026-10-30-instructor-signature-reminder 보고서에서 구분합니다.
  • 2026-10-28 가입서 금액 입력: 운영자 작성 금액은 숫자 키 입력·Enter 확정 후 실제 상품명·금액 값을 먼저 대조합니다. 다음 단계 뒤 원본 필수 입력 2/2를 확인하고, 이폼싸인의 입력완료 안내가 끝나 전송 가능한 상태가 된 뒤 전송창을 엽니다. 필수항목 검증 콜백을 우회하거나 전송 버튼을 반복 클릭하지 않습니다. 수신자 지정·최종 전송 전임이 확인된 준비 실패도 자동으로 실패 횟수를 초기화하지 않으며, 운영자 승인·최신 원본·문서함 미발송과 접수 흔적 부재 확인 후 같은 작업에서만 복구합니다. 이미 접수했거나 결과가 불명확한 문서는 재전송하지 않습니다.
  • 2026-09-28 가입서 오류 보강: 문서의 실제 운영자 입력칸이 준비된 뒤 작성하고, 입력 준비·전송 전환·전송창 오류를 구분합니다. 재시도 중인 작업은 관제에서 주의로 표시합니다. 발송 확인 후 해당 작업의 이전 오류만 해소하고, 다른 단계의 오류와 발송 이력은 보존합니다. 원천은 이폼싸인 문서함과 eformsignInstructorMemberJobs이며, 서명 대기를 미발송으로 판단해 재발송하지 않습니다.
  • 추적 작업이 없는 신규회원 등록은 자동 재발송하지 않고 완료·진행 문서를 먼저 연결합니다. 현재 강사회원가입서 템플릿과 이름이 정확히 한 건일 때만 자동 보정하고, 없거나 여러 건이면 확인필요로 중단합니다.
  • 강사회원 가입서 정보 반영 v2 · 2026-10-30: 서명 완료된 정확한 가입서·실제 단일 수신자·현재 StudioMate 강사회원을 대조합니다. 생년월일과 주소는 전용 회원정보의 빈칸만 각각 보완하며 기존 값은 덮어쓰지 않습니다. 6자리 생년월일은 아래 2026-10-31 승인 기준을 적용합니다. 운영자가 승인한 카카오 주소검색에는 기본 도로명·건물번호 또는 지번만 전달합니다. 이름·연락처·생년월일·상세 동호수는 보내지 않으며 정확히 한 건 일치할 때만 선택합니다. 한 항목의 충돌·검색 불명은 다른 안전한 항목을 막지 않습니다. 완료 메모에는 제공자의 실제 완료시각과 문서 ID만 남기며 주소·생년월일·건강답변을 복사하지 않습니다. 9/28 상세 메모와 기존 정보는 보존합니다. 정본은 eformsignInstructorMemberJobs/memberMemos, 하위 복사는 기존 studiomateMemoWriteJobs와 공용 브라우저 잠금을 사용합니다. 메모 synced와 항목별 확인필요는 구분하며 문서별 고정 키로 중복을 방지합니다. 사용자가 승인한 이번 과거분은 전체 완료 문서함 대조 후 최신 완료 가입서와 유일하게 일치한 강사회원만 소급합니다. 과거 발송·동의·접수를 만들어내거나 새 계약·안내를 보내지 않습니다. 구현·배포·소급 처리·보류 및 재조회 검증은 2026-10-30-instructor-signup-profile-v2 보고서에 구분합니다. 기존 주기와 회원 발송 시간 규칙은 유지합니다.
  • 가입서 6자리 생년월일 · 2026-10-31: 정확한 서명 완료 가입서의 YYMMDD는 현재 StudioMate의 전체 생년월일과 먼저 대조합니다. 뒤 6자리가 일치하면 기존 연도를 보존합니다. 빈칸이면 처리 시점 한국 연도의 끝 두 자리 이하를 2000년대, 초과를 1900년대로 변환합니다(2026년: 00~26 → 2000~2026년, 27~99 → 1927~1999년). 존재하지 않는 날짜·오늘/미래 날짜·기존 값 충돌·불명확한 원본은 확인필요로 보류하며 덮어쓰지 않습니다. 서명 답변 원문은 바꾸지 않고 정책 버전·기준시각·결과 해시를 기록해 연도가 바뀌어도 당시 결과를 검증합니다. 기존 eformsignInstructorMemberJobs → memberMemos/studiomateMemoWriteJobs 처리와 공용 잠금을 그대로 사용합니다. 앞으로 기존 정기 처리기가 처리할 대상에만 적용하며 완료 작업 초기화·과거분 일괄 수정·회원 발송·새 자동화는 하지 않습니다. 구현·무발송 검증 완료, 운영 반영·규칙 배포 및 이후 실제 회원 적용 여부는 2026-10-31-instructor-signup-six-digit-birth 보고서에 구분합니다.
  • 완료 사실·답변 정보 분리 · 2026-10-30: 실제 완료시각·단일 수신자와 현재 원본 회원이 정확히 일치해도 가입서 입력 연락처 등이 다르면 개인정보까지 일치한다고 간주하지 않습니다. 이 경우 completion_only로 완료 메모만 남기고 생년월일·주소는 쓰지 않으며 확인필요를 보존합니다. 답변 원본을 빈 값으로 꾸미거나 기존 결제·주문 연락처 검증, 로그인·보안 차단을 우회하지 않습니다. 이번 소급은 확인된 회원 범위만 처리하며 전체 문서 검증 완료와 구분합니다. 취소·신원 불명·다른 등급은 제외하고 과거 상태·원본 오류는 보존합니다. 동일 문서의 저장 결과불명은 전체 내용 재조회로만 확인하며 중복 저장하지 않습니다.
  • 완료 문서·템플릿·회원 ID·이름·연락처를 대조한 뒤 eformsignInstructorMemberJobs에 답변 원본을 보관하고 memberMemos 및 기존 studiomateMemoWriteJobs 큐에 연결합니다. 문서번호별로 한 번만 반영하며 기존 메모는 수정·삭제하지 않습니다. 원본 답변을 공개 화면이나 실행 로그에 출력하지 않습니다.
  • 신규 등록은 회원·수강권·가입서와 회원정보·메모의 StudioMate 재조회 검증이 끝나면 완료합니다. 항목 충돌·주소 승인 대기는 확인필요로 구분하고 메모 완료만으로 정보 전체가 반영됐다고 표시하지 않습니다. 수동 예약 여부는 완료 조건에 포함하지 않습니다. 기존 완료 문서의 소급은 이번 명시적 승인 범위로 제한하며, 이후 새 완료 가입서는 기존 처리기에 연결합니다. 별도 조회 자동화나 알림톡 재발송은 추가하지 않습니다.
  • 2026-09-28 운영 검증: 완료 가입서 1건의 생년월일·소속 메모 저장과 새로고침 후 표시, CORE 완료 상태, 재실행 시 추가 처리 0건을 확인했습니다. 이폼싸인 한글·영문 완료 표기와 StudioMate 날짜 입력 형식도 검증했습니다. 빈 답변과 기존 생년월일 충돌은 별도 확인하며 전체 과거 자료 소급은 하지 않았습니다.
  • 촬영형 강사레슨은 촬영, 강의 콘텐츠 제작·제공·판매와 해당 강의 소개를 위한 홍보 활용을 전제로 운영합니다.
  • 촬영·콘텐츠·해당 강의 소개 활용은 하나의 필수 동의로 받고, 별도의 포괄적인 홍보·마케팅 동의 항목은 두지 않습니다.
  • 필수 동의에 동의하지 않으면 촬영형 강사레슨을 신청하거나 수강할 수 없습니다.
  • 개인정보 수집·이용 동의는 별도 필수 항목으로 유지합니다.

2026-09-26 운영 적용 · 당일 수강권 발급 검증 건을 회원 프로필 동기화 전에도 일정별 수강인원에 반영합니다. 노션 공식 일정 연결·캘린더·예약확정 안내 실발송을 검증했습니다.

  • 새 강사레슨 예약확정 안내는 노션 아카이브 명지점 아래의 월별 안내 페이지에서 공식 일정·과정·수강 순서를 읽습니다. 별도 노션 DB는 만들지 않습니다.
  • 월별 안내는 기존 제목인 “10월 아카이브 강사레슨” 형식을 유지합니다. 상단 연도·월, ARCHIVE METHOD 과정과 날짜·요일·시작·종료 시간, 하루 정원, A/B팀 수강 순서를 완성하면 다음 달에도 코드 추가 없이 연결됩니다. 신청 예시 날짜는 집계하지 않습니다.
  • 수강권 발급 확인 시 일정을 조회하고 알림톡 후보에 노션 원본과 일정 사본을 기록합니다. 조회 결과는 최대 5분 재사용하며, 일정 불일치·누락은 확인필요로 남깁니다. 발송 전 내용이 달라지면 안내 재처리로 최신 내용을 확인합니다.
  • 캘린더 버튼은 같은 노션 일정으로 자동 생성합니다. 기존 9월 관리번호·링크와 발송 이력은 보존하며, 새 일정 관리번호는 수업일에 고정하여 페이지를 교체해도 중복발송 키가 바뀌지 않습니다.
변경·검증 상태2026-09-14 폐기 릴리스: 신규 API 요청은 410으로 차단하고 발송 큐에서도 웰컴을 제외합니다. 15초 조회 작업과 점검 자동복구 대상에서 제거합니다. 기존 개별 가입서·서명·PDF는 보존하며, StudioMate 자체 계약서 자동화는 센터 서명·발급·이력 검증 후 별도 적용합니다.
강사레슨 수강 취소 · 2026.10.16운영자는 일정별 수강 명단의 수강 취소에서 회원·날짜·사유를 확인해 요청합니다. StudioMate의 해당일 미사용 강사레슨 (2T) 수강권을 사용불가 처리하고 연결 예약을 취소하며 결제 환불은 별도입니다. 원본 회원·발급권 ID와 전체 예약을 재확인하고 두 차례 결과 대조 후에만 취소 완료 및 좌석 반환으로 표시합니다. 미사용·단일 일자·비공유 수강권만 자동 처리하며 사용 이력·중복·진행 중 발송·불완전 원본은 확인필요입니다. 요청·접수 불명확 상태는 반복 클릭하거나 자동 재실행하지 않습니다. 원본 이력과 이미 발송된 가입서·알림톡은 삭제하지 않습니다.
취소 원천·실행·검증원천은 기존 회원·접수 ID, 운영자 승인 요청과 취소 직전 StudioMate 수강권·예약 화면입니다. studiomateInstructorLessonCancellations에 고정 키와 감사 기록을 보존하며 기존 맥미니 강사레슨 등록 실행기가 공유 브라우저 잠금 아래 처리합니다. 처리 중에는 좌석을 미리 반환하지 않고 결과 확인 후만 반영합니다. 뒤늦은 동기화·가입서·발송 결과는 취소 상태를 되돌리지 않으며 같은 접수의 자동 재등록을 차단합니다. 2026-10-16 운영자 승인 실사용 1건의 수강권 사용불가·연결 예약 2건 취소·결제 무변경을 원본 대조했습니다. 사용불가 수강권은 이전 수강권 보관함에서 발급 ID를 재확인합니다. 최초 후속조회 보류는 재취소 없이 독립적인 2회 읽기 검증으로 해소했고, 자동 후속조회 보완은 다음 정상 운영 건에서 확인합니다. 배포 버전은 CORE release.json과 운영 실행기 Git 리비전으로 확인합니다.
현재 확인 위치StudioMate 회원·수강권·자체 계약서 / 과거 가입서 원본: Firestore onsiteWelcomeRequests, memberSignupContracts, studiomateMemberProfileWriteJobs / Google Drive 가입서 PDF 폴더 / CORE 강사레슨 / Firestore lectures, bookings, memberProfiles.activeTickets, instructorLessonRegistrations, studiomateInstructorLessonJobs, studiomateInstructorLessonCancellations, eformsignInstructorMemberJobs, instructorMemberConsents / 이폼싸인 강사회원가입서

아임웹 친구 초대 · 2026.09.16

친구가 처음 가입하면 초대자와 친구에게 각각 적립하는 혜택입니다.

운영 중

승인된 기준

  • 신규 이메일 가입 1건당 초대자와 가입한 친구에게 각각 3,000원을 지급합니다. 초대자는 한국시간 달력 월 최대 30,000원·10건, 친구는 회원당 최초 1회입니다. 구매·휴대폰 인증은 요구하지 않습니다.
  • 초대자의 월 한도를 넘겨도 신규 친구의 3,000원은 유지합니다. 따라서 월 30,000원은 행사 전체 예산 한도가 아닙니다. 친구 혜택은 별도 시작 시각 이후 가입부터 적용하며 소급 지급하지 않습니다.
  • 기존 가입의 소급 적립, 테스트·관리자 계정, 자기추천·중복 지급은 제외합니다. 지난달 미지급분은 자동 이월하지 않습니다. 운영 제외 목록 3개 계정을 초대자·신규 가입자 양쪽에 적용합니다.
  • 아임웹 유료 기능의 캠페인은 실행하지 않습니다. 자체 적립과 동시에 켜면 중복 지급될 수 있습니다. 비활성 여부는 관리자가 확인하는 운영 조건입니다.

지급 시험과 정기 실행

  • 양쪽 적립 변경: 기존 초대자 원장·시작 시각은 유지하고 친구 적립 원장을 별도로 기록합니다. 새 설정 inviteeStartsAt와 inviteeTested가 모두 갖춰져야 친구 적립이 시작됩니다.
  • 양쪽 적립 자동 테스트 157개로 수신자·중복·부분 실패·월 한도·월 경계·기존 원장 호환을 확인했습니다. 9월 16일 승인된 실제 시험에서도 두 테스트회원 각각 +3,000원·-3,000원, 최종 잔액 0원과 그룹 유지를 확인했습니다.
  • 이번 친구 적립은 실제 자동 지급 경로로 검증했습니다. 초대자는 과거 지급·회수 기록이 있어 자동 중복 차단을 유지하고 별도 시험 사유로 적립했습니다. 양쪽 재실행은 추가 지급 0건이며, 회수 후에도 지급 기록을 지우지 않습니다. 새 가입 1건에서 양쪽이 동시에 처음 적립되는 전 과정 시험과는 구분합니다.
  • 양쪽 지급은 각각 확인합니다. 한쪽 결과가 불명확하면 해당 지급은 보류하고 이미 지급한 쪽에는 다시 지급하지 않습니다. 월 경계를 넘긴 미완료 지급은 운영자 확인 대상으로 남깁니다.
  • 별도 승인된 가입 시험: +3,000원 지급, 재실행 중복 차단, -3,000원 전액 회수. 두 일반 테스트회원의 잔액 0원·그룹 유지 확인. 회수 후에도 원장의 지급 기록을 보존합니다.
  • 운영 설정 활성화: 2026-09-15T11:29:14.318Z(한국시간 20:29). 모의실행은 회원 83명·2페이지, 연결 1건·제외 1건, 적립 대상 0건입니다.
  • 5분 간격 정기 실행 3회를 확인했습니다. 마지막 확인 2026-09-15 한국시간 20:39, 회원 83명·2페이지, 연결 1건·제외 1건, 지급·실패 0건입니다. Mac mini가 켜져 있고 사용자 세션이 유지되어야 실행됩니다.
  • 운영 원장 0행, 일별 백업 20,480바이트, 잠금 파일 없음, launchctl 종료 코드 0·간격 300초 확인. 지급 대상이 없어 실고객의 정기 적립까지 검증한 것은 아닙니다.

원천과 실패 처리

  • 원천은 고정 사이트·유닛의 전체 아임웹 회원 조회와 실제 적립 내역입니다. 브라우저 입력·CORE 미러로 지급 대상을 정하지 않습니다. 지급 시도·월 예산은 Git 밖 소유자 전용 영구 SQLite 원장에 보존합니다.
  • 원장 누락 시 빈 원장으로 재생성하지 않습니다. 비공개 폴더의 배타 잠금·한국시간 일별 백업으로 보호하고 백업 실패 시 지급을 차단합니다. 결과 불명·미해결은 실패로 남기며 자동 재지급하지 않습니다.
  • 기본 인증 프로필 고정과 auth doctor 실제 갱신을 확인했습니다. Gmail은 기존 위임 권한의 메일함 프로필 읽기만 확인했고 시험 이메일은 보내지 않았습니다. 상태 JSON에는 집계·시각·고정 오류 코드만 기록합니다.

화면과 검증

  • 아임웹 유료 기능을 참고한 PC 중앙 팝업·모바일 하단 팝업을 배포했습니다. 320·390·768·1440px에서 가로 넘침 없이 표시되고 닫기·공유 영역의 터치 크기를 확인했습니다.
  • 사이드메뉴 커뮤니티 아래와 사이트 하단에 친구 초대 진입점이 각 1개 있습니다. PC·모바일 실제 메뉴 클릭으로 팝업이 열립니다. 사이드메뉴는 가운데 정렬·아카이브 레드 배경으로 구분합니다.
  • 자동 테스트 120개 통과. SEO Footer 원문 54,568자를 보존하고 210자 로더만 추가했습니다. 관리자 화면을 다시 열어 전체 저장값 일치를 확인했으며 기존 Header·Body 원문은 바꾸지 않았습니다.
  • unit-script CLI는 다른 과거 원문 50,004자를 반환하므로 스크립트 게시 CLI의 운영 apply 차단을 유지합니다. Hosting 자산 배포와 구분합니다.
  • 일반회원의 코드 생성·공유 URL·복사 완료 표시와 권한 없는 일반 테스트회원의 내 강의실 접근 차단을 확인했습니다. 복사한 클립보드 내용의 외부 읽기, 소셜 가입과 전체 영상 재생 검증으로 확대하지 않습니다.
  • 가입폼 자동 입력은 약관 동의 승인 후 빈 가입폼에서 별도 확인합니다. 추가 계정 생성·추가 지급 없이 확인할 항목입니다.
주의휴대폰 인증이 없으므로 다른 이메일을 이용한 동일인의 다계정 가입을 완전히 차단하지는 못합니다. 적립 결과가 불명확하면 재지급하지 않고 실제 적립 내역부터 확인합니다.
조회 오류 알림 · 2026-10-05회원 원본 조회의 일시적 네트워크·429·5xx 오류는 3회 연속 실패 시 알립니다. 정상 전체 실행 후 기존 실패 알림이 있는 경우에만 복구를 1회 알립니다. 적립 결과 불명·인증·장부 오류는 즉시 알리며 자동 재적립하지 않습니다. 원천은 실행 결과와 비공개 query-alert-state.json이며, 재시작 후에도 실패 횟수를 유지합니다. 계속 실패하면 같은 오류 알림은 하루에 한 번만 반복하고, 메일 전달 실패는 다음 실행에서 재확인합니다. 시스템 점검은 최신 실행과 일치하는 1~2회 일시적 조회 오류만 알림을 유예합니다. 관련 모의 테스트 302개를 통과했습니다. 메일 전송 불명 시 보낸편지함부터 대조하며, 운영 장애를 인위적으로 만들거나 적립·접수를 수동 재실행하지 않습니다.
오류 분류 보강 · 2026-10-10아임웹 CLI의 status_code 오류 형식을 읽고, 확인된 회원 목록 조회 네트워크·429·5xx 오류만 0.5초 후 1회 재확인합니다. 전체 조회가 완료돼야 적립하며, 계속 실패하면 기존 3회 연속 실패 알림을 적용합니다. 인증·권한·원본 불일치·서로 다른 오류 정보·적립 결과 불명은 즉시 확인필요이며, 적립 요청은 자동 재전송하지 않습니다. 실행 상태와 알림에는 회원 조회·적립 준비·전송·검증 단계 및 상태코드만 기록하고 개인정보·인증정보는 기록하지 않습니다. 기존 적립 장부가 원천이며 금액·월 한도·중복방지·실행 주기는 유지합니다. 관련 회귀 테스트와 운영 배포 후 정기 실행을 각각 확인하며, 과거 오류의 원래 응답은 남아 있지 않아 외부 장애 원인을 단정하지 않습니다.
반복 조회 메일 방지 · 2026-10-12적립 시작 전 회원 목록 조회만 실패한 실행은 원인 코드가 IMWEB_REQUEST_FAILED여도 3회 연속 실패할 때 알립니다. 사이에 정상 전체 실행이 있으면 횟수를 초기화하고, 1~2회 실패 후 정상화는 실패·복구 메일을 모두 보내지 않습니다. 별도 시스템 점검도 동일한 최신 실행 증거에만 이 기준을 적용합니다. 인증·잘못된 응답·원본 검증·장부 오류 및 적립 준비·전송·검증 실패는 즉시 알립니다. 이미 조회 장애를 알렸더라도 다른 적립 단계의 실패는 새 오류로 알립니다. 재조회는 확인된 네트워크·429·5xx에만 1회 허용하며 적립 요청은 재전송하지 않습니다. 실행 원천과 비공개 상태 파일을 유지하고, 금액·대상·중복 방지·5분 실행 주기는 변경하지 않습니다.
관련 실행·다음 조치run-imweb-referral-worker.mjs / run-imweb-referral-job.mjs / imweb-referral-site.mjs. 실제 가입폼 자동 입력 확인은 약관 동의 승인 대기이며 완료 후 이 항목을 갱신합니다.

8. 정산·비즈니스 지표

대시보드는 정산 자동화 결과를 참조하고 중복 계산을 줄입니다.

finance

원본 폴더

  • Google Drive 아카이브 정산 폴더의 수업매출원본데이터와 수강권매출원본데이터를 사용합니다.
  • 정산 자동화는 파일 수정일이 아니라 파일명 날짜 범위로 대상 파일을 고릅니다.
  • 닫힌 월은 전체월 파일을 우선 사용하고, 없을 때만 최신 누적 파일을 사용하며 경고를 남깁니다.
  • 회원·수업일시·강사·수강권·출결·차감금액이 모두 같은 완전 중복 원천 행은 한 건만 반영하고 제외 근거를 원천중복검수 시트에 남깁니다.

자동화 결과

  • Mac mini 월말정산 LaunchAgent가 매월 1일 전월 원천을 검증해 월별 정산 파일과 강사별 HTML 명세서를 만듭니다.
  • 노쇼는 수업료 50%, 지급 50% 규칙을 적용합니다.
  • 대시보드 DB 동기화는 정산 자동화의 대시보드_EXPORT 탭을 우선 읽어 Firestore에 쓰는 ETL로 축소합니다.
  • 대시보드_EXPORT가 없거나 지원 형식이 아니면 기존 Master 시트 계산으로 임시 fallback하고 경고 로그를 남깁니다.
  • 수업매출과 수강권매출은 서로 다른 지표이므로 화면 라벨을 명확히 구분합니다.
  • 회원수는 단일 유효회원으로 표시하지 않습니다. 수강권 보유회원은 정산 시트 기준, 예약 이용회원과 출석 회원은 Firestore bookings 예약 원천 기준으로 분리합니다.
  • 회원 지표는 매일 23시 기존 대시보드 작업의 별도 단계로 집계합니다. 매출 성공·실패와 무관하게 실행하며 누락 월과 당월·전월만 조회합니다. 회원 집계가 실패하면 전체 작업도 실패로 기록합니다.
  • 수강권 보유회원은 아카이브 DB의 월별 유효회원 수와 고유 전화번호 목록이 일치해야 반영합니다. 정산 시트 기준이며 실시간 보유 수강권 재산정이나 월말 확정의 증거로 혼용하지 않습니다. 예약은 기존 취소·중복·강사레슨 제외 기준을 유지합니다.
  • 원천 월·필수 열 누락, 회원수와 목록 불일치, 예약 원본 없음은 0명으로 채우지 않고 기존 값을 보존합니다. 회원 지표는 전용 집계시각을 기록하고 누락 시 경영 화면에 집계 필요를 표시합니다.
  • 회원 집계는 dashboardSnapshots/current의 회원 지표 필드만 동시 수정 보호 후 갱신하고 재조회 검증합니다. 수정 버전은 2026.10.08이며 운영 복구·배포 및 원천 대조 결과는 작업 보고서에 기록합니다. 배포 검증과 이후 23시 정기 실행 결과는 구분합니다.

월별 보관

  • 매월 1일 전월 정산월 폴더를 생성합니다.
  • 강사별 정산명세서에는 총 합계, 전월대비, 그룹 합계, 프라이빗 합계, 총 수업 수, 월 그룹 평균을 표시합니다.
  • 월간 요약은 현재 형식의 정산보조·정산대장·월간리포트를 우선 읽고, 과거 파일에서만 Sheet3 호환 방식을 사용합니다.
  • 정규직과 프리랜서 보수를 함께 받는 강사는 전체 수업 보수에서 정규직 세전 급여를 먼저 공제한 금액만 프리랜서 보수로 계산하고, 정규직 실지급액은 한 번만 합산합니다.
  • 이전 달 정산 데이터는 헤더 이름으로 연결하며, 정규직 실지급액이 있는데 세전 공제액을 확인할 수 없으면 이중계상 방지를 위해 명세서 생성을 중단합니다.
  • 보수기준표에 없는 강사는 기본 요율을 추정하지 않습니다. 누락 강사명과 필요한 그룹/프라이빗 탭을 메일로 보고하고 정산 생성을 중단합니다.
  • 일 단위 누적 파일은 최종 월 파일이 만들어진 뒤 휴지통으로 보냅니다.

수강권 잔여금액

  • Mac mini LaunchAgent는 매일 22:00에 기동하고 KST 월말인 날에만 집계를 게시합니다.
  • 최신 적용 완료 StudioMate 회원목록과 memberProfiles.activeTickets를 사용하며, 3시간보다 오래된 원천이면 게시를 중단합니다.
  • 횟수권은 잔여횟수, 기간권은 잔여일수와 주당횟수를 이용해 환산 잔여횟수를 계산합니다.
  • 결제금액은 회원·수강권·이용기간이 같은 결제이력을 합산하고, 미수금·분할결제·임시 프로필·가격 이상치는 동일 권종 기준가로 보정합니다.
  • 평균 회당가격은 그룹·1:1 프라이빗·듀엣을 분리하고, 0원 수강권과 강사레슨은 평균에서 제외합니다.
  • 수강권별 상세표는 가격 커버리지 대신 해당 수강권 잔여금액이 전체 잔여금액에서 차지하는 비율을 표시합니다.
  • HTML 보고서는 home 계정 Google Drive의 아카이브 정산/잔여수강권에 YYMM 잔여수강권.html 이름으로 저장합니다.
  • 결과는 ticketLiabilityReports/current와 월별 문서에 보관하고 CORE Business 고정 링크에서 확인합니다.
  • 잔여금액은 경영 검토용 계산값이며 알림톡, 예약, 결제, 환불 등 외부 실행 원천으로 사용하지 않습니다.
현재 확인 위치CORE Business / Google Drive 아카이브 정산 자동화 / Firestore businessSnapshots / ticketLiabilityReports

9. 환불 안내·동의서

환불 예상액은 원천과 계산 근거를 확인한 뒤 운영자가 확정합니다.

manager review
발송 원천 확인 · 2026.10.15Firestore 항목 순서는 변경으로 판단하지 않고 동일한 수강권 필드의 실제 값을 비교합니다. 현재 canonical 수강권·계산값 검증에 더해 입력 전과 최종 전송 직전 StudioMate 원본을 읽어 회원·수강권·기간·횟수·결제 원천을 대조합니다. 조회 실패·모호한 대상·환불 또는 취소 표시는 발송을 중단합니다. 수강권 환불 표시를 실제 지급 완료로 간주하지 않습니다. 수강권만 먼저 종료한 건은 원래 계산과 미발송 이력을 보존하고 운영자에게 별도 확인합니다.
동의서·문자 검증이폼싸인 한글·영문 화면과 준비 완료를 확인합니다. 발송 성공은 같은 문서의 이름·ID·전체 수신번호·명시적 전송 상태가 함께 확인될 때만 기록합니다. 문서함 메뉴의 완료 문구나 다른 행의 번호는 증거가 아닙니다. 최종 클릭 후 불명확한 건은 확인필요로 유지하며 재발송하지 않습니다. StudioMate 문자는 접수 증거와 최종 수신을 구분합니다. 큐가 비어 있다는 결과로 기존 실패가 해결됐다고 판단하지 않습니다.
실화면 입력·최종 확인 · 2026.10.15이폼싸인 입력은 키 입력 후 Enter로 문서에 확정하고, 등록 서명 확인과 작성일을 검증한 뒤 필수 8항목 완료 시에만 진행합니다. StudioMate는 읽기 전용 수신자 칸의 이름과 검증된 원본 회원 ID를 확인합니다. 첫 보내기는 확인창 열기이며, 1명 즉시 발송 확인 후 원본·중복을 다시 검사하고 최종 확인을 누릅니다. 요청의 회원 ID·제목·본문과 응답 발송 ID를 대조하며 포인트 차감값을 발송 인원으로 해석하지 않습니다. 발송 접수·통신사 처리 중·전송 성공은 별도 상태로 보존합니다.
반영·다음 확인대상은 맥미니 환불동의서·문자 처리기와 CORE 운영규칙이며 계산식·발송 주기·권한·실제 환불 실행은 변경하지 않습니다. 격리 회귀·원본 읽기 검증 후 이 Hosting 릴리스와 해당 Git 소스를 운영 반영합니다. 기존 보류 건의 실제 발송은 별도 승인·원장 확인 후 처리합니다. 다음: 확인필요 건의 금액·지급 전 안내 승인과 발송 증거 확인. 최종 갱신: 2026.10.15.

회원과 수강권 원천

  • 운영자는 이름으로 현재 유효회원 후보를 조회하고, 마스킹 연락처·활성 수강권 수·원천 갱신일을 확인해 회원카드를 선택합니다.
  • 선택 이후 계산과 발송은 화면의 이름이나 연락처가 아니라 동일 스튜디오의 canonical memberId로 다시 검증하며, 연락처는 memberProfiles 원천을 사용합니다.
  • 현재 보유 수강권은 memberProfiles.activeTickets를 사용합니다. member360Cards, members 하위 purchases, 잔여금액 보고서는 환불 판단 원천으로 사용하지 않습니다.
  • 수강권 유형은 원천 횟수 필드로 고정하며, 처리 시점에 만료된 수강권은 과거 요청일 입력으로 우회할 수 없습니다.
  • 실결제금액이 없으면 임의 추정하지 않고 결제내역 위치와 확인 근거를 요구합니다.
  • 유효기간이 지난 수강권, 이미 이용한 수업, 회원 귀책 노쇼, 무료·이벤트·프로모션 혜택은 환불 대상 또는 금액에서 제외합니다.
  • 회원과 수강권을 선택하면 현재 원천으로 예상액을 바로 계산할 수 있습니다. 무료·증정·이벤트·프로모션 혜택과 완료수업·노쇼 공제 여부는 회원 안내 또는 동의서 발송 전에 운영자가 확인합니다.

환불 계산

  • 모든 환불은 결제금액의 10% 위약금을 공제합니다.
  • 횟수권 사용금액은 1회 정상 단가 × (StudioMate 총횟수 − 잔여횟수)로 계산하며 사용횟수 수동 덮어쓰기를 허용하지 않습니다.
  • 기간권은 StudioMate 이용 시작일·만료일·환불 요청일로 남은 일수를 계산하고, 7일 단위의 잔여 주수로 환산합니다. 남은 7일 미만은 환불 잔여 주수에 포함하지 않습니다.
  • 기간권의 총 주수·사용 주수·잔여 주수는 원천에서 자동 산출하며 운영자 수동 입력이나 홀딩 근거 입력을 받지 않습니다. 원천 날짜가 없거나 서로 맞지 않으면 계산을 중단합니다.
  • 증정·이벤트·프로모션 혜택 공제액은 사용금액과 분리해 운영자가 확인합니다.
  • 회원 안내 문구는 잔여금액에서 위약금과 추가 공제를 차감하는 방식으로 표시하며, 기간권은 확인된 잔여 주수 또는 잔여 일수를 함께 기록합니다.
  • 화면 금액은 예상 환불액이며 동의서 작성과 운영자 확인 후 최종 확정합니다.

발송과 후속 처리

  • 환불 요청 접수 → 내부 승인 → 이폼싸인 서명 → 결제수단별 환불 → 회원 안내 순서로 처리합니다.
  • 운영자 확인 후에만 이폼싸인 환불동의서를 한 건 발송합니다. 같은 회원의 같은 수강권은 계산값이나 근거 문구가 달라도 활성 환불 건을 하나만 허용합니다.
  • 환불계산 안내 문자는 CORE에서 별도로 요청합니다. 서버가 현재 수강권과 계산 해시를 다시 확인한 뒤 studiomateRefundSmsJobs에 등록하고 Mac mini 전용 브라우저 큐가 StudioMate 문자 화면에서 발송합니다.
  • 같은 회원·수강권·계산 해시의 문자는 한 건만 허용합니다. 문자 제목과 본문은 서버 생성본으로 고정하며 화면에서 임의 수정한 문구는 발송하지 않습니다.
  • 현재 이폼싸인 Personal 요금제는 API를 지원하지 않으므로 CORE는 eformsignRefundJobs에 작업을 저장하고 Mac mini의 전용 브라우저 큐가 발송합니다.
  • 환불동의서 v9의 회원명·연락처·결제금액·위약금·공제액·환불금 필드 계약을 고정하고, SMS 수신자와 진행 중 문서함의 문서 ID까지 확인해야 발송 완료로 기록합니다.
  • 발송 직전에 현재 memberProfiles.activeTickets를 다시 읽어 수강권 금액·사용·상태·유효기간이 바뀌면 중단합니다. 중단된 큐는 전송 클릭 전 작업만 재시도하고 클릭 가능성이 있으면 운영자 확인 상태로 둡니다.
  • 문서명과 해당 문서 ID가 함께 확인되는 완료 화면 또는 발송 문서 목록만 성공으로 기록합니다. 응답이 불명확하면 자동 재발송하지 않고 발송 결과 확인 상태로 남깁니다.
  • 회원은 이폼싸인에서 환불 사유, 필요한 지급계좌, 서명을 직접 작성하며 CORE는 계좌번호를 저장하지 않습니다.
  • 실제 카드·계좌 환불, StudioMate 수강권 변경, 수강권 종료는 자동 실행하지 않고 별도 확인 절차로 유지합니다.
현재 확인 위치CORE 환불 / Firestore refundCases·studiomateRefundSmsJobs / eformsign 환불 신청서 / Notion 회원권 환불 및 양도(규정 원문)

10. 클라우드 비용

운영 기능을 유지하면서 사용하지 않는 상시 자원과 반복 읽기를 먼저 줄입니다.

optimized

현재 운영 기준

  • ARCHIVE PILATES 운영 데이터는 Firestore와 Google Drive 원천을 사용하며 Firebase Data Connect와 Cloud SQL은 사용하지 않습니다.
  • 사용 목적, 데이터 소유자, 종료 기준이 없는 유료 상시 자원은 만들지 않습니다.
  • 새 Cloud SQL, Data Connect, 최소 인스턴스, CPU 상시 할당은 비용 추정과 종료 계획을 먼저 남긴 뒤 승인합니다.
  • 채용 사이트 Cloud Run은 최소 인스턴스 0, 요청 처리 중 CPU 할당 방식으로 운영합니다.

반복 작업 기준

  • Firestore 예약·연락처·설문 작업은 전체 문서 폴링보다 상태와 dueAt/nextRunAt 조건 쿼리를 우선합니다.
  • 프라이빗 리포트는 수업 후 기록이 들어오기 전에는 waiting_post로 보관하고 정기 생성 대상에서 제외합니다.
  • 운영 영향이 작은 누락 설문 확인은 시간 단위로 유지합니다. 프라이빗 차트는 변경 이벤트 기반 Notion 반영과 매일 22:20 복구 작업을 사용합니다. 회원 사전설문 Notion 표시는 기존 매일 22:40 한 번 동기화를 유지합니다.
  • 사용하지 않는 Scheduler와 Secret은 참조·대체 수단을 확인한 뒤 삭제합니다.

2026-08-22 비용 최적화 · 72시간 검증 완료

  • CORE 홈은 전체 회원 디렉터리를 처음부터 읽지 않고 재등록 후보의 memberProfiles만 묶음 조회해 최신성을 확인합니다. 명령창에서 회원명을 2자 이상 검색할 때만 회원 검색 데이터를 한 번 불러오며, Members 화면의 기존 조회는 유지합니다.
  • 목록별 최대 건수는 브라우저에서 자르지 않고 Firestore 쿼리 단계에 적용해 원본 전체 읽기를 막습니다.
  • CORE HTML, 디렉터리형 메뉴 URL, release.json, manifest는 캐시하지 않고, JavaScript와 CSS는 저장 후 재검증하며, 이미지·아이콘·폰트는 짧게 캐시합니다.
  • 알림톡 큐, 프라이빗 사전설문 응답, Google 주소록 큐 워커는 canonical 원천과 10분 이내 운영 약속을 유지하면서 10분 주기로 처리합니다.
  • 72시간 결과: Firestore 읽기 823,641건(-10.2%), CORE Hosting 전송 22,423,039바이트(-99.7%), 알림톡·연락처 워커 호출 432건·431건(각 약 -50%)으로 줄었습니다.
  • billable instance time은 알림톡 61.6초(-46.0%), 연락처 202.5초(+12.5%), 프라이빗 설문 700.7초(-42.7%)입니다. 연락처는 실제 작업 39건을 처리해 단독 시간은 늘었지만 세 워커 합계는 36.4% 감소했습니다.
  • 상태: 72시간 사용량 비교를 완료했습니다. 세 Scheduler는 10분 주기·ENABLED, 대응 함수는 ACTIVE이며 HTTP 실패, 최근 큐 실패, 처리 대기, 10분 초과 적체가 없습니다.

2026-09-27 반복 조회와 권한 연결 정리

  • 목적: 운영 주기를 유지하면서 같은 원천의 반복 조회와 불필요한 비밀정보 연결을 줄입니다. 회원·예약·발송 원천과 백업·PITR은 변경하지 않습니다.
  • 기존 Google 설문 시트는 Drive 버전이 같으면 본문 조회를 생략합니다. 버전 확인 실패·변경·24시간 경과 시 전체 확인하며, 응답 처리에 실패하면 체크포인트를 진행하지 않습니다.
  • Instagram은 실행 시각이 된 pending/retry 작업과 30분 이상 지난 processing 작업만 조회합니다. 발행 요청 후 결과가 불명확한 건은 수동 확인을 유지합니다.
  • 이미 중지된 API 쓰기·일일 대시보드·출석 리마인더 Scheduler 3개를 제거합니다. 과거 큐 이력과 수동 조회 경로는 보존하며, 관제는 명시된 삭제 대상의 404만 정상 종료로 판단합니다.
  • 비밀정보는 삭제하지 않고 확인된 함수별 의존성에만 연결합니다. 알림톡·연락처·주차의 10분 처리 주기는 유지합니다.
  • 배포·검증 완료: 함수 78개 ACTIVE·설정 일치, 종료 작업 3개 404, 게시 인덱스 2개 READY, CORE 두 주소와 Mac mini 실행 소스 반영을 확인했습니다. 구현 커밋은 3c64940이며 실제 사용량 감소율은 동일 기간 지표가 쌓인 후 확인합니다.

관제와 검증

  • Cloud Billing 상세 내보내기는 archive-pilates.archive_billing_export 데이터셋을 사용합니다.
  • 월별 비용은 프로젝트, 서비스, SKU, 리전 순으로 확인하고 전월 같은 날짜 대비 급증 항목부터 원인을 찾습니다.
  • 비용 절감 변경도 기능 배포와 동일하게 빌드, 라이브 URL, Scheduler 상태, Firestore 상태를 함께 검증합니다.
  • 운영 기능을 줄여야 하는 경우에는 자동으로 중단하지 않고 운영자 확인 대상으로 올립니다.
현재 확인 위치Google Cloud Billing / BigQuery archive_billing_export / Cloud Run Careers / Firebase Functions Scheduler

11. 배포·검증·보고

배포 요청은 검증, commit, deploy, live check, GitHub push를 한 세트로 처리합니다.

release gate

2026-09-14 시스템 보호 보강

  • 목적: 반복 동기화 실패·과거 배포 덮어쓰기·복구 수단 부재를 차단합니다. 원천은 bookings와 memberProfiles이며 Notion은 표시용입니다.
  • 예약 변경으로 bookingId가 갱신된 차트는 기존 요청 ID를 재사용합니다. 이름이 바뀐 회원의 Notion 위치는 같은 memberId·담당 강사의 기존 기록으로 확인하며, 다른 차트의 페이지를 덮어쓰지 않습니다.
  • 점검은 기한이 지난 pending/retry, 활성 기록의 Notion 실패, 조회 범위 부족, 주요 Scheduler와 복구 설정을 함께 확인합니다. 통합된 별칭과 명시적으로 종료한 요청은 장애에서 제외합니다.
  • Firestore 삭제 보호·7일 PITR·일일 백업 7일 보관을 사용합니다. 새 백업은 첫 26시간 동안 생성 대기로 구분하고, 이후 백업이 없거나 오래되면 실패로 보고합니다.
  • 오래된 API 출석 대기는 이력만 보존하고 재실행하지 않습니다. 중단한 API 워커는 자동복구 대상이 아닙니다.
  • 배포는 최신 origin/main과 동일한 깨끗한 main에서만 허용합니다. 직접 Firebase CLI 호출에도 동일한 Functions 사전 검증을 적용합니다.
  • 검증: 전용 작업공간에서 회귀 테스트와 실제 백업·Notion 상태를 확인합니다. 배포와 복구 시험 증거는 2026-09-14 시스템 보강 보고서에 별도로 기록합니다.

배포세트

  • 배포, 반영, publish, release 요청은 scoped commit, 필요한 target 배포, 라이브 확인, push까지 포함합니다.
  • UI/static-only 변경은 Hosting만, Functions 변경은 해당 codebase만 우선 배포합니다. CORE는 scripts/deploy-archive-core-live.sh 또는 npm run deploy:archive-core-live를 사용합니다.
  • 배포 전 변경 범위, 테스트, 롤백 기준을 확인합니다.
  • CORE Hosting은 최신 CORE 작업 기준에서만 배포합니다. 배포 전 validate:archive-core-hosting이 수강료 문의 카드, 최근 발송/메모 패널, KPI 카드 높이 CSS를 확인하고, 빠진 항목이 있으면 배포를 중단합니다.
  • 검증된 기능 커밋을 origin/main으로 fast-forward 승격한 뒤 깨끗한 main 작업공간에서 배포합니다. npm run release:promote-main:dry로 먼저 확인하며 강제 푸시는 하지 않습니다.
  • 기능 브랜치만 라이브에 배포되고 main으로 승격되지 않은 상태는 rollback/다른 스레드 덮어쓰기 위험으로 봅니다. 승격이 막히면 차단 원인을 보고하고 별도 정리합니다.
  • ARCHIVE METHOD 강사레슨 큐카드 하단은 별점 제출 대신 수업촬영영상 시청을 위한 ARCHIVE PILATES 아임웹 가입 CTA로 안내합니다. 배포 전 롤백 가드와 배포 후 라이브 canary는 페이지 응답, CTA 문구, 가입 링크를 확인합니다.
  • 배포 후 실제 URL, callable/API 응답, 브라우저 오류를 확인합니다.

Functions 경계

  • 알림톡은 functions-alimtalk, 프라이빗/설문/리포트는 functions-private-chart, 동기화는 functions-sync, 앱 callable은 functions-app, 콘텐츠 운영은 functions-social로 나눕니다.
  • contracts 패키지에 collection, event, queue payload, codebase ownership을 먼저 기록합니다.
  • affected-only 감지와 CI 변경 감지 결과를 배포 범위 판단에 사용합니다.

실패 보고

  • 운영 자동화, 배포, 외부 서비스 write, production data job 실패는 home@archivepilates.com으로 보고합니다.
  • 메일 제목은 [업무영역][상태] 핵심내용 형식을 사용합니다.
  • 현장에서 해결된 로컬 테스트 실패, 의도한 dry-run 발견, 단순 dirty status는 실패 메일 대상이 아닙니다.

12. 인프라·워크라인

스레드와 worktree를 분리해 기능 간 충돌을 줄입니다.

coordination

Mac mini

  • Mac mini는 Codex 통합 운영 허브이자 자동화 실행 환경입니다.
  • StudioMate Playwright 공유 프로필은 lock을 잡고 직렬 실행합니다.
  • 잠금은 시간이 지났다는 이유만으로 해제하지 않습니다. 같은 Mac의 소유 프로세스가 종료된 사실과 만료 시간을 모두 확인하며, 소유권이 불명확하면 유지합니다. 해제할 때도 잠금 토큰을 재확인합니다.
  • worktree 정리는 origin/main 병합 완료·변경 없음·사용 중 아님을 모두 확인하고 명시한 경로만 처리합니다. 푸시만 된 미병합 작업이나 원본·결과 파일은 자동 삭제하지 않습니다.
  • Codex가 디버깅·검증을 위해 연 Chrome 탭·창·Playwright 세션은 작업 종료 전에 닫고, 종료와 lock 해제를 finally에서 보장합니다.
  • 사용자가 기존에 열어 둔 Chrome 상태와 소유권이 불명확한 프로세스는 닫지 않으며, 광범위한 프로세스 종료 명령은 사용하지 않습니다.
  • 로그인·승인을 위해 창을 남길 때는 남긴 대상과 이유를 완료 보고에 명시합니다.
  • 자동화 실패나 지연은 Firebase 장애와 분리해 LaunchAgent, 로그, 원본 파일부터 확인합니다.

워크라인

  • 새 ARCHIVE IN/CORE 작업은 먼저 workLanes에 임시 상태로 둡니다.
  • 코드 변경은 기능별 전용 worktree/branch에서 진행합니다.
  • workLanes는 외부 발송, StudioMate write, Contacts write, 결제·예약 판단 원천이 아닙니다.
  • 승격 전에는 원천 컬렉션, target, canonical key, 중복 처리, 검증 방식을 기록합니다.

스레드 운영

  • 요구사항, 우선순위, 최종 판단, 배포 승인은 ARCHIVE CORE 메인 명령 스레드가 담당합니다.
  • 기능별 스레드와 Subagent는 좁은 조사·검증·패치만 맡고 결과를 메인 스레드로 보고합니다.
  • 여러 작업이 같은 파일이나 같은 운영 규칙을 동시에 수정하지 않도록 lane을 나눕니다.

13. 폐기·보관 기준

더 이상 현재 운영 원칙이 아닌 항목을 명확히 분리합니다.

deprecated

Notion 운영규칙

  • Notion 아카이브 운영 규칙은 2026.06.10 이후 현재 운영규칙 업데이트 대상이 아닙니다.
  • 기존 내용은 과거 참조로만 사용하고, 새 규칙은 CORE 운영규칙 탭에 기록합니다.
  • 프라이빗 개인레슨 차트는 Firestore 원천의 읽기 전용 표시로만 유지하며 기능 성공 여부는 Notion에 의존하지 않습니다.

StudioMate API 모드

  • 자사 예약 시스템 운영 전까지 기본 동기화 모드로 사용하지 않습니다.
  • 출결, 결석, 메모 작성 같은 StudioMate write는 앱에서 차단하고 큐/Playwright 경로만 검토합니다.
  • API 재도입은 별도 설계와 검증 후에만 가능합니다.

ARCHIVE IN 운영자 앱

  • 기존 ARCHIVE IN 운영자 콘솔 역할은 ARCHIVE CORE로 이동합니다.
  • ARCHIVE IN은 향후 자사 사이트 예약 시스템 전환 시 회원/강사용 앱 방향으로 재정의합니다.
  • 채팅 기능, 알림톡 상태 태그처럼 사용도가 낮거나 혼란을 만든 UI는 숨김 상태를 유지합니다.