SoriCue data contract

개인정보·데이터 흐름

이 페이지는 법률 자문이 아니라 현재 릴리스가 실제로 실행하는 데이터 경로와 앱이 통제할 수 없는 외부 보존 한계를 설명하는 제품 계약입니다.

notice 2026-08-26-dictionary-v1dataflow browser-direct-local-v1.2026-08-26-dictionary-v1mode browser-direct-local-v1processors 2026-08-26.v23Aderi · SoriCue Connector 1.0.10

현재 활성 흐름

  1. 1. 웹앱 또는 확장 팝업이 사용자가 고른 마이크·탭·화면·파일 오디오를 메모리에서 짧은 STT 창으로 만듭니다.
  2. 2. 현재 entitlement lease를 확인한 뒤 사용자가 선택한 Groq/OpenAI API로 직접 보냅니다.
  3. 3. API key는 이 기기의 user-scoped localStorage에 저장되며 사용자가 개별 삭제 또는 기기 데이터 삭제를 실행할 때만 제거됩니다.
  4. 4. 받아쓰기 세션과 세그먼트는 이 기기 IndexedDB에만 저장되고 서버 백업이나 silent fallback은 없습니다.
  5. 5. 관리자 기본 단어와 계정당 최대 200개 개인 단어를 분리된 Supabase snapshot에 삽입 순서·revision·schema version과 함께 저장합니다. 개인 단어는 같은 계정의 다른 컴퓨터와 동기화되고, 현재 기기에는 같은 계정의 마지막 검증 snapshot만 IndexedDB에 남습니다. 관리자 단어를 먼저 224토큰 안에서 합성한 prompt는 작업 시작 때 고정되어 선택한 STT provider로 직접 전송되며 로그·진단·분석· 확장 메시지·일정 payload에는 넣지 않습니다.
  6. 6. 직접 만든 고정 일정 원본은 사용자별 최대 100개·128KiB로 Supabase에 저장합니다. Biz PT 일정은 다른 컴퓨터 복원을 위해 현재·원본 제목(회원·학생명일 수 있음), source ID·logical identity, 현재·원본 시각, mode·enabled·offset·hidden, base·override와 repeat week를 최대 500개·512KiB 및 반복 32주·16KiB의 별도 계정 snapshot으로 Supabase에 저장합니다. 브라우저와 확장에는 device binding·alarm·redacted run을 포함한 실행용 사본을 두며, 일정 감소 시 사용자·기기·주·revision·후보 SHA-256만 담은 재확인 marker 1개를 최대 2분 보관합니다. 일정 생성·Biz PT import·기기 연결 자체는 녹음 동의가 아닙니다.
  7. 7. 사용자가 사용자·기기·날짜에 묶인 고지를 확인하고 `오늘 자동 녹음 준비`를 실행한 경우에만 준비된 마이크·시스템 오디오가 예약 구간에서 열립니다. 구간 전에는 오디오를 저장·받아쓰기·MP3 기록·외부 전송하지 않고, 종료 시 마지막 PCM의 연속 전달과 받아쓰기·선택 MP3 finalize를 확인합니다.
  8. 8. 저장된 받아쓴 내용이 있을 때만 ChatGPT·Gemini·Claude 통합 외부 요약 v5 동의 범위에 따라 현재 선택한 서비스로 받아쓴 내용·prompt를 전달합니다. 더블 프롬프트에 별도 동의한 경우 새 대화 탭 2개에 받아쓴 내용을 각각 포함한 서로 다른 prompt를 병렬 제출합니다.
  9. 9. 확장 오디오는 /app을 거쳐 선택한 STT provider로 브라우저에서 직접 전송되며, API key·로그인 cookie·영상 프레임은 확장 메시지로 보내지 않습니다.
  10. 10. 녹음이 실제로 시작·정지될 때 중앙 서버에는 사용자 ID, 한국 날짜, 시작·완료 횟수와 시작부터 정지까지의 초만 집계합니다. 오디오·받아쓴 내용·제목·provider는 포함하지 않습니다.
  11. 11. 필수 동의와 선택 광고 이메일 상태는 이메일을 중복 저장하지 않고 사용자 ID, 종류, 문서 버전·언어·SHA-256, 서버 시각과 출처를 append-only Supabase 원장에 기록합니다.
  12. 12. 기본 운영 진단은 content-free strict schema만 사용합니다. 인증된 same-origin route가 expected subject와 session subject를 확인한 뒤 Supabase Storage가 아닌 RLS 보호 Postgres event·incident table에 기본 30일 보관합니다. Full Diagnostic의 로컬 provider 원본 결과·별도 opt-in 오디오는 이 경로와 Mac archive로 보내지 않습니다.
  13. 13. 현재 개인정보 동의가 유효한 인증 사용자의 allowlisted Product UX action은 전용 server-only HMAC pseudonym, journey session·sequence, route·outcome·제한된 duration·mode·viewport와 UTC 달력 날짜만 최대 90개 날짜 보관합니다. 정확한 event 시각이나 받아쓴 내용은 수집하지 않고 관리자는 집계만 봅니다.

보존과 사용자 제어

데이터기본 보존삭제·내보내기
받아쓰기·세그먼트·제목사용자가 삭제할 때까지; 30/90/365일 자동 삭제 선택 가능세션별 삭제, 이 계정의 기기 데이터 삭제, 전체 로컬 JSON 내보내기
Provider API key사용자가 개별 삭제 또는 기기 데이터 삭제를 실행할 때까지 이 기기에 저장개별 삭제, 기기 데이터 삭제. 내보내기에는 원문 key를 넣지 않음
개인 단어장·적용 prompt개인 단어 최대 200개와 revision을 인증된 계정의 Supabase snapshot에 계정 수명 동안 저장하고 같은 계정의 다른 컴퓨터와 동기화; 현재 기기 IndexedDB에는 같은 계정의 마지막 검증 snapshot만 fail-open cache로 보관. 관리자 기본 단어와 결합해 224토큰 안에서 적용되는 prompt는 작업 시작 때 메모리에 고정하고 선택한 STT provider 요청에 직접 전달하며 SoriCue 로그·진단·분석·확장 protocol에는 저장하지 않음. 개인 단어 삭제는 중앙 snapshot과 cache에 반영하고 기기 데이터 삭제는 해당 기기 cache를, 회원 탈퇴는 중앙 privacy plane에서 개인 snapshot을 명시적으로 삭제한 뒤 Auth cascade로 다시 삭제; 관리자 전역 snapshot은 다른 사용자의 탈퇴로 삭제되지 않음개인 단어별 삭제, 같은 계정의 마지막 검증 snapshot 로컬 JSON 내보내기, 현재 기기 cache 삭제, 회원 탈퇴 시 중앙 개인 snapshot 삭제. 관리자 기본 단어장은 다른 사용자의 탈퇴로 삭제되지 않음
오디오열린 녹음 gate와 provider 요청 중 메모리에서만 사용하고 앱 서버 저장 없음; video frame은 소비·저장하지 않음앱 저장본 없음; provider 측 사본은 provider 정책 적용
직접 만든 고정 일정사용자별 최대 100개·128KiB의 제목·날짜·시각·색상·반복·받아쓰기 방식·revision을 Supabase에 계정 수명 동안 보존하고 브라우저·확장에는 실행용 사본을 보관일정별 삭제는 중앙 원본과 사본에 반영; 기기 데이터 삭제는 해당 기기 사본을, 회원 탈퇴는 Auth cascade로 중앙 원본을 삭제. Supabase backup 순환 정책 적용
Biz PT 일정 계정 원본actual/projected occurrence 최대 500개·512KiB와 repeat config 최대 32주·16KiB. 현재·원본 제목(회원·학생명일 수 있음), source ID·logical identity, 현재·원본 시작/종료, mode·enabled·offset·명시 시각·hidden, base·override와 repeat week를 Supabase에 계정 수명 동안 보존재가져오기·편집·비우기로 중앙 원본을 갱신하고 다른 컴퓨터에서 복원. 기기 데이터 삭제는 그 기기의 cache와 content-free sync marker만 지우며, 회원 탈퇴는 Auth cascade로 중앙 원본을 삭제. Supabase backup 순환 정책 적용
예약 녹음·외부 요약 로컬 상태사용자·기기·날짜별 예약 고지 동의와 확장 로컬 실행 일정 snapshot·alarm·bounded run/attempt는 각 TTL·활성 SoriCue binding 동안 보존합니다. Biz PT 취소·삭제 감소 재확인 marker는 콘텐츠 없이 1개·최대 2분 보관하고, ChatGPT·Gemini·Claude 통합 v5 동의는 철회·로그아웃·계정 전환·기기 데이터 삭제·회원 탈퇴까지 보존준비 취소, SoriCue 기기 연결 해제, provider 동의 철회, 로그아웃·계정 전환, 기기 데이터 삭제 또는 회원 탈퇴 범위에 따라 제거
선택 MP3옵션이 켜진 예약 구간만 안전하게 정리한 일정 제목과 충돌 방지 suffix로 사용자가 선택한 로컬 폴더에 저장SoriCue 서버 업로드 없음; 앱 데이터 삭제와 별개로 사용자가 파일 시스템에서 삭제
녹음 사용량사용자 ID별 날짜·시작/완료 횟수·녹음 초를 중앙 계정 수명 동안 보존관리자 조회 가능; Google 재인증 회원 탈퇴가 중앙 원장과 함께 삭제
운영 진단기본 운영 진단은 content-free strict schema만 사용. SoriCue-origin 일정 진단 localStorage는 사용자별 최대 400개·14일, IndexedDB 전달 outbox는 사용자별 최대 256개·14일이며 서버의 영구 수락 ACK 뒤에만 삭제하고 offline 재시도·멱등 eventId·최대 50개 batch를 사용; 확장 private storage는 SHA-256 사용자 partition별 최대 800개·512KiB·30일, event당 4KiB, 최근 partition 최대 8개로 제한하고 서버의 영구 수락 뒤에만 ACK 삭제. expected-subject와 인증 session subject가 일치하는 same-origin Route Handler만 최대 event 8KiB를 받아 service_role admin client로 Supabase Postgres 구조화 event·incident table에 기본 30일 저장하며 Storage object log는 사용하지 않음. direct anon/authenticated table 권한은 없고 RLS를 강제하며 회원 탈퇴 privacy plane이 event·incident를 명시적으로 삭제한 뒤 auth.users FK cascade도 적용. occurredAt/receivedAt은 시스템 동작의 발생·수신 시각이며 일정 제목이나 사용자가 입력한 정확한 개인 수업 시각을 뜻하거나 저장하지 않음전용 bearer export token을 macOS Keychain에만 둔 운영 수집기가 no-store cursor API에서 content-free event·incident를 증분 수집해 ~/Library/Application Support/SoriCue/Diagnostics 아래 권한 700/600의 NDJSON·incident JSON·일별 report로 기본 365일 보관. launchd는 로그인 시와 5분마다 실행하고 token·payload·로컬 경로를 자체 로그에 남기지 않으며 retention 변경·날짜 기준 삭제·uninstall 명령을 제공; 이미 export된 운영자 사본은 회원 탈퇴 FK cascade가 자동 회수하지 않으므로 승인된 권리 요청·로컬 보존 정책으로 별도 삭제
본인 허용용 Full Diagnostic기본 content-free 운영 진단과 분리된 본인 계정 allowlist용 Full Diagnostic Shadow Mode. 서버 환경에서 기능과 정확한 Auth UUID를 허용하고 사용자가 이 브라우저에서 직접 켠 동안에만 로컬 IndexedDB에 사건·provider 원본 결과를 최대 7일 보관하며, 품질 이상 오디오 보존은 별도 기본-off 선택으로 최대 24시간·20개·50MiB. 오디오 bytes·provider 원본 결과·prompt·API key는 진단 서버나 운영 Postgres로 전송하지 않고, 서버에는 별도 strict content-free 단계·집계·hash만 전송; 기능 비활성화나 allowlist 회수로 전체 사용자에게 켜지지 않음기본 진단과 분리되며 전체 사용자에게 켜지지 않음
Product UX 분석필수 개인정보처리방침에 동의한 인증 사용자의 엄격한 제품 경로 allowlist만 same-origin API로 수집; 전용 server-only HMAC salt로 만든 익명 사용자 값, journey별 무작위 session ID·sequence, route·action ID·outcome·제한된 duration·online/offline/file 방식·viewport와 UTC 달력 날짜만 Supabase에 오늘 포함 최대 90개 달력 날짜 보관하고 매일 인증된 Cron 및 요청 시 만료분 삭제. 인스턴스별 120회/분 burst 제한과 별도로 DB가 익명 사용자·UTC 날짜별 최대 10,000행을 원자적으로 제한하며 받아쓴 내용·hash·prompt·AI 답변·회원/일정/파일명·정확한 시각·email·token·API key·audio·DOM text·session replay는 수집하지 않음. 관리자는 집계만 조회; 회원 탈퇴 시작 시 적재를 차단하고 Auth 삭제 뒤 다시 purge하며 잔존 access token 차단용 HMAC tombstone은 날짜만 담아 최대 31개 UTC 달력 날짜 뒤 삭제회원 탈퇴 시작 시 적재 차단·purge, Auth 삭제 뒤 재삭제; 관리자에게는 집계만 제공
계정·라이선스중앙 auth·권한 기록Google 재인증 후 로컬·라이선스·중앙 권한·동의·Auth 사용자와 이메일을 plane별로 삭제; 부분 실패는 성공 처리하지 않음

로컬 JSON은 현재 기기 범위이며 complete account export가 아닙니다. Supabase 인증·라이선스·수동 일정 원본·Biz PT 일정 원본과 외부 provider 사본은 포함하지 않습니다. 로컬 받아쓰기에는 서버 백업이 없습니다. 개인 단어장은 내보내기 시 중앙의 현재 계정 snapshot을 우선 확인하고, 연결할 수 없으면 이 기기의 마지막 검증 snapshot을 포함합니다.

Processor·내부 구성요소와 비활성 경로

inventory 2026-08-26.v23. 이 표는 현재 제품 동작을 설명하며 관할별 법률 자문을 대신하지 않습니다. 외부 정책은 전송 직전에 다시 확인해야 합니다.

Supabase account and authority services

activesubprocessor
목적·trigger
SoriCue 로그인 인증, 법적 동의 원장, 중앙 권한·라이선스 제어, 관리자 기본 단어장과 사용자별 개인 단어장 snapshot 저장·같은 계정의 다른 컴퓨터 동기화, 수동 일정과 Biz PT 일정의 계정 원본 저장, 같은 계정의 다른 컴퓨터 복원·회원 관리 바로가기 유지, 최소 녹음 사용량 집계, content-free 운영 진단 typed event·incident·service-only deadline claim/evaluation metadata·reconcile generation state·payload-free round-robin scheduler cursor와 사용자 비연결 Next.js service error 보관 및 pseudonymous Product UX 경로 집계가입, 로그인, 동의·철회, 세션·권한 확인, 단어장 조회·추가·삭제·동기화, 수동 일정 저장, Biz PT 가져오기·편집·다른 컴퓨터 복원, 녹음 시작·정지, 허용된 운영 진단 event 수신·deadline claim·atomic incident reconcile/evaluation·조회·정리 또는 회원 탈퇴 시
데이터
이메일, 인증 식별자, 세션 cookie, 사용자 ID와 동의 종류·문서 버전·언어·해시·서버 시각, 최소 권한·라이선스·작업 journal, 삽입 순서의 관리자 기본 단어와 사용자별 최대 200개 개인 단어·revision·schema version·갱신 시각, 사용자 ID별 최대 100개 수동 일정의 opaque ID·제목·날짜·시작/종료·색상·반복·mode·autoRecord·revision·갱신 시각, 최대 500개 Biz PT actual/projected occurrence의 현재·원본 제목(회원·학생명일 수 있음)·source ID·logical identity·선택적 1~20자리 숫자형 회원 ID(member.uid)·현재/원본 시작/종료·timezone·mode·enabled·offset·명시 시각·hidden·base 설정·override 표시와 최대 32주 반복 설정, 날짜별 시작/완료 횟수·녹음 초; content-free 진단의 사용자 ID, event/incident UUID, 운영 발생·수신 시각, 허용 event/result/failure·from/to·stateAction/stateReason·예상 다음 단계·deadline, SHA-256 session/tab/operation/trace, allowlist source·moduleId·codePathId·actionId, producer release·commit과 별도 ingest release·commit·identity source·확장 버전, duration/attempt/queue depth와 오류 시 제한된 class/digest/message fingerprint·프로젝트 stack frame; event 내부 service-only deadline metadata의 UUID claim token·DB claim/lease 시각·claimed generation·평가 시각·completed/context_overflow enum; service-only reconcile state의 사용자 ID·opaque 64hex correlation scope hash·단조 증가 next generation·단조 증가 last reconciled generation counter·DB 관리 updated/expires 시각; payload-free singleton scheduler의 마지막 사용자 pointer·DB 갱신 시각; 사용자 비연결 Next.js service error의 UUID v1–v8·발생/수신 시각·next_server·release/commit·allowlist route group/HTTP method·instrumentation/proxy 두 exact code path 중 하나·allowlist error class·선택적 error digest SHA-256·message SHA-256·최대 8개 enum-allowlist 프로젝트 frame 및 별도 1분 global·release/route·fingerprint bucket의 accepted·포화형 dropped count·expiry; Product UX의 전용 HMAC pseudonym, journey별 무작위 session UUID·sequence, allowlisted route/action/outcome, 제한된 duration·mode·viewport 및 UTC 달력 날짜
최소 수집
개인 단어는 계정당 200개, 단어·snapshot JSON은 bounded strict schema로 제한하고 관리자 전역 snapshot과 사용자 snapshot을 분리함. 수동 일정은 100개·128KiB, Biz PT occurrence는 500개·512KiB, repeat config는 32주·16KiB로 제한. 단어·합성 prompt는 로그·진단·분석·확장 protocol에 넣지 않고 적용 여부·개수·토큰·revision만 허용함. 진단 wire event는 strict allowlist·8KiB이며 DB에는 개별 제약 typed column만 저장하고 임의 event payload·broad JSON object를 두지 않음; 최대 8개 project frame만 exact-schema·enum 검증 JSON array임. incident는 bounded window와 누락 event·마지막 정상 상태만 사용하고 채팅·prompt·AI 응답·받아쓴 내용·요약·오디오, 이름·email·일정 제목·메모·사용자 입력·정확한 개인 수업 시각, 화면·DOM·URL query, body·raw header/error, cookie·JWT·Authorization·비밀번호·Supabase/provider/API/service_role key, 로컬 경로·IP·위치를 거부. deadline metadata는 UUID·DB 시각·generation·completed/context_overflow enum만 두고 client 입력·사용자 응답·operator export에서 제외함. generation을 fresh typed context 읽기 전에 예약하고 lifecycle은 target+opaque lineage-guard dual-generation CAS를 사용하며, null·expired·mismatch claim과 1,000개 초과 context는 fail closed하여 false incident를 만들지 않음. reconcile state는 사용자 ID·opaque 64hex correlation scope hash·단조 증가 counter 2개·DB 관리 updated/expires 시각만 두고 진단 payload를 저장하지 않음. web producer의 well-formed stale/invalid proof는 해당 event만 unknown-producer로 강등하고 주장 release/commit을 신뢰하지 않으며 malformed·extra·event mismatch는 400. 사용자 비연결 service error도 user ID·payload·URL/query·body/header·cookie/token/session·IP/location·content·local path·raw error·source map을 거부하고, same-minute dedupe는 release·route·method·code path·class·선택적 digest·message fingerprint가 모두 일치할 때만 적용하며 1분 accepted 600/120/10 cap과 별도 포화형 dropped count를 둠. Product UX도 strict allowlist만 허용하고 받아쓴 내용·hash·prompt·AI 답변·회원/일정/파일명·정확한 시각·email·token·API key·audio·DOM text·session replay를 거부; Biz PT 비밀번호·cookie/session·원본 HTML·전화번호·이메일, description·위치, device ID·alarm·run/status/failure·actual run 시각, 오디오·받아쓴 내용·prompt·AI 응답·provider key·로컬 MP3 경로를 중앙 일정 snapshot에도 기록하지 않음
전송 경로
사용자 브라우저 또는 SoriCue 서버 → 인증된 same-origin Route Handler → service-only typed persist·deadline claim·atomic incident reconcile/evaluation RPC와 최소 table 권한 → 구성된 SoriCue Supabase 프로젝트
처리 근거
서비스 제공을 위한 계약 이행과 계정·권한 보안
사용자 제어
개인 단어 추가·삭제와 현재 기기 cache purge·내보내기, 일정 편집·숨김·재가져오기·중앙 snapshot 비우기, 일일 준비 취소, 설정에서 광고 동의 철회·현재 기기 데이터 삭제, 로그아웃과 Google 재인증 회원 탈퇴; 탈퇴 privacy job이 개인 단어 snapshot·운영 진단 event·incident와 Product UX pseudonym의 row를 Auth 삭제 전에 명시적으로 삭제하고 UX 적재를 차단한 뒤 Auth 삭제 후 다시 purge. 개인 단어와 진단 user-linked row·reconcile state는 cascade되고 singleton scheduler의 일치 pointer는 SET NULL
보존·삭제 한계
계정 이메일·동의·권한·개인 단어 snapshot·수동 일정 원본·Biz PT 계정 원본·일별 사용량은 계정 수명 동안 보관하고 식별자가 제거된 SoriCue 삭제 job tombstone은 완료 후 30일; 관리자 기본 단어 snapshot은 전역 운영 데이터로 유지됨. service-only reconcile state는 마지막 state 활동 후 최대 30일이며 계정 삭제 시 auth.users cascade로 더 일찍 삭제. payload-free singleton scheduler pointer는 다음 round-robin advance 또는 해당 사용자 삭제의 SET NULL까지 보관. 구조화 운영 진단 event·incident 원본과 사용자 비연결 Next.js service error는 기본 최대 30일이며 만료 cleanup과 byte/event 계측을 적용. 사용자 비연결 row는 per-user account/portability export·계정 삭제 대상이 아니지만 private operator export와 승인된 Mac archive에는 포함되며 DB에서는 expiry cleanup, Mac에서는 기본 365일 local retention·별도 권리 요청 삭제를 적용. Product UX event는 오늘을 포함한 최대 90개 UTC 달력 날짜, 잔존 access token 차단용 날짜-only HMAC tombstone은 최대 31개 UTC 달력 날짜; Biz PT 원본은 사용자가 덮어쓰기·비우면 갱신되며 확장 device binding·alarm·실행 snapshot·run은 Supabase 일정 원본에 저장하지 않음. 확정된 Supabase 처리 위치·리전 및 backup 범위: ap-southeast-2 (Oceania, Sydney, Australia). 탈퇴는 Auth 사용자·이메일을 hard delete하고 event 내부 claim/evaluation metadata와 reconcile state를 FK cascade로 제거하며 scheduler pointer를 SET NULL하지만 backup 최종 소거는 확정할 프로젝트 순환 정책에 따름. user ID 없는 service error는 계정 삭제로 선택할 수 없음. 이미 Mac에 export된 사본은 자동 삭제되지 않으며 서버가 제공한 lowercase 64hex userHash만 `delete-user`에 사용하고 email·name·user UUID는 사용하지 않는 별도 권리요청 절차 적용

Google OAuth

activesubprocessor
목적·trigger
계정 가입·로그인과 회원 탈퇴 전 동일 Google 계정 재인증사용자가 Google로 계속하기 또는 회원 탈퇴 재인증을 실행할 때
데이터
Google 계정 식별자, 계정 이메일, OAuth code와 인증 metadata
최소 수집
받아쓴 내용, 오디오, 사용자 STT API key, 광고 이메일 발송 payload는 전달하지 않음
전송 경로
사용자 브라우저 ↔ Google OAuth ↔ 구성된 Supabase Auth 프로젝트
처리 근거
계정 서비스 계약 이행, 계정 보안 및 재인증
사용자 제어
Google 계정 선택, OAuth 취소, 로그아웃, 회원 탈퇴 및 Google 계정 연결 관리
보존·삭제 한계
SoriCue의 Google 식별자와 이메일은 회원 탈퇴 시 Auth에서 삭제. Google의 글로벌 인프라, 계정 설정 및 개인정보처리방침에 따름. Google 자체 로그인·보안 기록은 SoriCue가 삭제할 수 없어 사용자가 Google에 별도 요청해야 함

GitHub OAuth

activesubprocessor
목적·trigger
기존 GitHub 계정 로그인 유지기존 사용자가 로그인 화면에서 GitHub로 계속하기를 실행할 때
데이터
GitHub 계정 식별자, 계정 이메일, OAuth code와 인증 metadata
최소 수집
받아쓴 내용, 오디오, 사용자 STT API key, 광고 이메일 발송 payload는 전달하지 않음
전송 경로
사용자 브라우저 ↔ GitHub OAuth ↔ 구성된 Supabase Auth 프로젝트
처리 근거
기존 계정 서비스 계약 이행과 계정 보안
사용자 제어
OAuth 취소, 로그아웃, 지원팀 권리 요청 및 GitHub 계정 연결 관리
보존·삭제 한계
SoriCue의 GitHub 식별자와 이메일은 회원 탈퇴 시 Auth에서 삭제. GitHub의 글로벌 인프라, 계정 설정 및 개인정보처리방침에 따름. GitHub 자체 로그인·보안 기록은 SoriCue가 삭제할 수 없어 사용자가 GitHub에 별도 요청해야 함

Google Sheets API

activeuser-selected-provider
목적·trigger
현재 받아쓰기 기록 필터 결과를 사용자의 Google Sheets 파일로 내보내기사용자가 별도의 Google Sheets 연결 버튼으로 drive.file 권한을 승인하고 현재 필터 결과 내보내기를 누를 때
데이터
연결 계정 식별자·이메일, 기록 ID, 회원, 일정 유형, 전체 제목, 생성·종료 시각, 상태, 받아쓰기 방식, 받아쓴 내용과 요약
최소 수집
현재 필터 결과만 전송하며 오디오, SoriCue 로그인 cookie, STT provider key, 확장 실행 진단은 전달하지 않음; OAuth access token은 페이지 메모리에만 보관
전송 경로
사용자 브라우저 ↔ Google Identity Services 및 Drive/Sheets API; SoriCue server 경유 없음
처리 근거
사용자의 별도 연결·권한 승인과 내보내기 동작
사용자 제어
Google 계정 선택·취소, 연결 해제와 권한 revoke, 필터 선택, 재시도, 생성된 Sheets 파일 열기·편집·삭제
보존·삭제 한계
access token은 페이지 메모리와 Google 만료 시간까지만 유지; Google permission ID별 spreadsheet ID·회원 탭 매핑은 현재 SoriCue 계정의 IndexedDB에 기기 데이터 삭제까지 유지. 생성된 spreadsheet와 Google 측 OAuth·보안 기록은 사용자의 Google Drive 및 Google 정책·계정 설정에 따름. 연결 해제나 SoriCue 기기 데이터 삭제는 사용자 소유 Google spreadsheet를 삭제하지 않으므로 사용자가 Google Drive에서 별도로 삭제해야 함

Lemon Squeezy

activesubprocessor
목적·trigger
구매 라이선스 검증과 활성 인스턴스 관리사용자가 라이선스를 등록하거나 서버가 해당 인스턴스를 검증·보상 비활성화할 때
데이터
라이선스 key, instance ID/name, 상품·store·variant·고객 메타데이터
최소 수집
받아쓴 내용·오디오·provider key는 보내지 않으며 중앙 DB에는 license key hash와 암호문만 저장
전송 경로
SoriCue 서버 → Lemon Squeezy License API
처리 근거
서비스 제공을 위한 계약 이행과 라이선스 부정 사용 방지
사용자 제어
라이선스 교체와 로그아웃은 가능; vendor 법정 기록은 앱에서 직접 삭제할 수 없음
보존·삭제 한계
계정·라이선스 수명과 연결; 회원 탈퇴 privacy job이 외부 인스턴스 결과를 확인한 뒤 중앙 암호문을 삭제. Lemon Squeezy의 결제·세무·법적 보존 정책에 따름. 법정 결제 기록, vendor backup, provider_unknown 작업은 즉시 소거를 보장하지 않음

Groq API

activeuser-selected-provider
목적·trigger
사용자가 요청한 음성 받아쓰기Groq를 선택하고 녹음·오디오 파일 받아쓰기를 시작한 뒤 현재 entitlement lease가 있을 때만
데이터
짧은 오디오 창, model, language, 관리자 기본 단어와 개인 단어에서 224토큰 안으로 컴파일한 `Preferred spellings:` 선택적 받아쓰기 prompt, 사용자가 입력한 Groq API key
최소 수집
현재 STT 창만 보내며 전체 기록의 받아쓴 내용이나 SoriCue auth token은 보내지 않음
전송 경로
사용자 브라우저 → Groq audio/transcriptions API (SoriCue 서버 우회)
처리 근거
사용자의 명시적 provider 선택과 받아쓰기 요청
사용자 제어
요청 전 취소, 개별 key·기기 데이터 삭제, Groq Data Controls와 key revoke
보존·삭제 한계
오디오는 SoriCue가 저장하지 않으며 key는 사용자가 직접 삭제할 때까지 사용자 기기에 저장. Groq 공식 문서상 inference customer data는 기본 비보존이지만 reliability/abuse 예외는 미국 GCP bucket에서 최대 30일이며 ZDR 설정 가능. 전송된 단어장 prompt를 포함한 Groq 요청의 usage metadata·예외 사본·법적 보존은 SoriCue가 회수하거나 삭제할 수 없음

OpenAI API

activeuser-selected-provider
목적·trigger
사용자가 요청한 음성 받아쓰기OpenAI를 선택하고 녹음·오디오 파일 받아쓰기를 시작한 뒤 현재 entitlement lease가 있을 때만
데이터
짧은 오디오 창, model, language, 모델이 지원할 때 관리자 기본 단어와 개인 단어에서 컴파일한 `Preferred spellings:` 선택적 받아쓰기 prompt, 사용자가 입력한 OpenAI API key
최소 수집
현재 STT 창만 보내며 전체 기록의 받아쓴 내용이나 SoriCue auth token은 보내지 않음
전송 경로
사용자 브라우저 → OpenAI /v1/audio/transcriptions (SoriCue 서버 우회)
처리 근거
사용자의 명시적 provider 선택과 받아쓰기 요청
사용자 제어
요청 전 취소, 개별 key·기기 데이터 삭제, OpenAI project key revoke와 Data Controls
보존·삭제 한계
오디오는 SoriCue가 저장하지 않으며 key는 사용자가 직접 삭제할 때까지 사용자 기기에 저장. 현재 OpenAI API data-controls 표에서 audio/transcriptions의 abuse-monitoring 및 application-state 보존은 없음으로 표시됨. 이미 전송된 단어장 prompt와 정책·법적 예외 또는 account/usage metadata는 SoriCue가 회수·삭제하거나 통제할 수 없으므로 사용자는 전송 전 최신 provider 계약을 확인해야 함

SoriCue account-synced manual schedule planner

activeinternal-component
목적·trigger
Biz PT 일정이나 캡처 확장 연결이 없어도 사용자가 고정·반복 일정을 만들고 일별·주간·월간으로 관리인증된 사용자가 SoriCue /schedule에서 수동 일정을 생성·수정·삭제·조회하거나 캡처 확장 연결 뒤 자동 녹음용 occurrence 동기화를 실행할 때
데이터
SoriCue 사용자 범위의 opaque series ID, 제목, 날짜, 시작·종료 시각, 색상, 반복 규칙, offline/online mode, autoRecord, revision과 갱신 시각
최소 수집
설명·참여자·이메일·위치·오디오·받아쓴 내용·prompt·AI 응답·provider key·인증 cookie·로컬 MP3 경로를 수동 일정 series나 진단 log에 넣지 않으며 최대 100개 series와 1회 투영 전체 최대 60개 occurrence로 제한
전송 경로
인증된 SoriCue /schedule ↔ SoriCue 서버 API ↔ 구성된 Supabase의 사용자별 RLS 보호 snapshot; 동일 origin localStorage와 연결 확장의 extension-private canonical state에는 실행·복구용 cache를 동기화
처리 근거
사용자의 일정 생성·편집 요청에 따른 서비스 계약 이행; 일정 생성과 autoRecord 설정은 녹음 동의가 아니며 실제 wall-clock 녹음은 별도 scheduled-capture v1 당일 동의 뒤에만
사용자 제어
개별 일정·반복 series 수정·삭제, occurrence별 autoRecord 해제, 로그아웃, 계정 전환, 기기 cache 삭제와 회원 탈퇴
보존·삭제 한계
Supabase에서 사용자별 최대 100개·128KiB series를 계정 수명 동안 보관하고 1회 화면 projection은 최대 60개 occurrence; SoriCue-origin localStorage와 연결 extension-private storage의 최대 100개 cache는 중앙 원본에서 재생성하며 일정 삭제·기기 연결 해제·로그아웃·계정 전환·기기 데이터 삭제·회원 탈퇴 범위에 따라 제거. Supabase 프로젝트의 리전·backup 순환 정책이 적용되며, 연결된 확장의 canonical manual series와 materialized occurrence에는 별도의 extension-local schedule 보유 계약 적용. 회원 탈퇴 시 auth.users cascade로 중앙 snapshot을 삭제하지만 Supabase backup 최종 소거는 프로젝트 순환 정책에 따르고, 이미 생성한 로컬 MP3나 사용자가 별도로 복사한 자료는 자동 삭제하지 않음

SoriCue account-synced Biz PT schedule planner

activeinternal-component
목적·trigger
사용자가 Biz PT에서 가져온 일정과 제목·시간·녹음 설정·숨김·반복 변경 및 회원 관리 바로가기를 같은 SoriCue 계정의 다른 컴퓨터에서 복원인증된 사용자가 Biz PT 주간 일정을 가져오거나 Biz PT occurrence를 편집·숨김·반복 설정하고, `/schedule`을 열어 중앙 원본을 조회·복원할 때
데이터
사용자별 snapshot revision과 갱신 시각, 최대 500개 actual/projected occurrence의 key·revision·현재 제목·현재 시작/종료·timezone·mode·enabled·offset·명시 시각·hidden, source ID·logical identity·선택적 1~20자리 숫자형 회원 ID(member.uid)·week/template identity·projection 여부·원본 제목·원본 시작/종료, base 설정과 title/time/mode/enabled/offset/hidden override 표시; 최대 32개 imported week를 갖는 repeat enabled/template week/updated time
최소 수집
occurrence JSON은 512KiB, repeat JSON은 16KiB로 제한하고 Biz PT 비밀번호·cookie/session·원본 HTML·전화번호·이메일, description·위치, SoriCue device ID·binding·alarm·run/status/failure·actual run 시각, 오디오·받아쓴 내용·prompt·AI 답변·provider key·로컬 MP3 경로를 중앙 원본에 포함하지 않음
전송 경로
사용자가 로그인한 Biz PT exact-host page → SoriCue 확장 → 인증·현재 법률문서 동의를 확인하는 SoriCue `/api/schedule/bizpt-snapshot` → 구성된 Supabase의 사용자별 account-owned snapshot; 다른 컴퓨터는 같은 API를 통해 읽고 그 기기의 실행 cache를 다시 생성
처리 근거
사용자가 요청한 일정 가져오기·편집·계정 간 복원을 위한 서비스 계약 이행; 일정 저장은 녹음 동의가 아니며 이용자는 가져오고 저장할 일정 정보에 필요한 권한을 확보해야 함
사용자 제어
Biz PT 재가져오기, 제목·시간·mode·enabled·offset·숨김·반복 편집, 중앙 snapshot 비우기, 현재 기기 cache 삭제, 로그아웃·계정 전환 및 Google 재인증 회원 탈퇴
보존·삭제 한계
Supabase 계정 원본은 사용자가 덮어쓰기·비우거나 회원 탈퇴할 때까지 보관; 회원 탈퇴 시 auth.users 외래 키 cascade로 삭제. 현재 기기의 device-bound 실행 cache·alarm·run은 별도 로컬 보유기간과 purge 계약을 따름. Supabase 프로젝트의 리전과 backup 순환 정책이 적용되며 순환 전 backup 사본의 즉시 소거는 보장하지 않음. 현재 기기 데이터 삭제는 그 기기의 cache와 동기화 marker만 지우고 다른 컴퓨터 복원을 위한 중앙 원본은 유지; 회원 탈퇴가 중앙 원본을 삭제하지만 Supabase backup 최종 소거는 프로젝트 순환 정책에 따름

SoriCue Chrome capture helper

activeinternal-component
목적·trigger
사용자가 선택한 탭·화면·마이크 오디오 캡처, PTT, Biz PT 직접 가져오기와 계정 원본 동기화·회원 관리 바로가기 유지, extension-local 일일 예약 녹음 scheduler 및 외부 요약 payload 전달확장 popup의 수동 캡처/PTT, 별도 scheduled-capture 고지에 동의한 사용자의 오늘 자동 녹음 준비 뒤 유효한 alarm, 또는 별도 provider 동의가 있는 외부 요약 동작
데이터
녹음 gate가 열린 동안의 3초 mono PCM 오디오 청크와 측정값, 대상 탭 ID/URL/제목, PTT 오디오, 외부 요약 payload; SoriCue user/device binding, browser-local에서 동기화한 최대 100개 수동 series, Biz PT 및 materialized manual occurrence; Supabase 동기화 전 device-free Biz PT 제목·원본 제목·source/logical identity·선택적 1~20자리 숫자형 member.uid·현재/원본 시각·설정·override·repeat weeks; content-free run 상태·redacted failure·outcome, Biz PT import receipt·현재 import recovery status 및 일정 감소 재확인 marker
최소 수집
Biz PT 비밀번호·cookie/session·원본 HTML·전화번호·이메일, 일정 description·위치, 화면 영상 프레임, provider API key, SoriCue auth cookie, 받아쓴 내용·prompt·AI 응답·로컬 MP3 경로를 schedule snapshot/run ledger/진단 log에 넣지 않음; import receipt는 식별자·주간 범위·revision·건수·변경 여부·시각만 포함하고 일정 제목이나 참여자 콘텐츠를 포함하지 않음; recovery status는 상태·redacted failure code·주간·시각만 포함하며 일정 제목·참여자 콘텐츠·raw error·Biz PT cookie/session을 포함하지 않음; 감소 재확인 marker는 사용자·기기·주간·snapshot revision·후보 SHA-256·만료 시각만 포함하고 제목·시각 원문이나 일정 행을 포함하지 않음
전송 경로
Biz PT 페이지 → exact-host content script → SoriCue 확장 local execution storage → SoriCue /schedule → 인증된 SoriCue Biz PT snapshot API → Supabase 계정 원본; SoriCue-origin 수동 series → exact-origin bridge → 현재 binding의 extension-private 실행 state와 materialized occurrence; 준비된 Chrome offscreen source → 예약 gate가 열린 동안만 SoriCue /app content script → browser-direct STT provider; 요약은 선택한 provider 입력창
처리 근거
수동 캡처/PTT 동작, Chrome 권한 승인, 사용자·기기·날짜에 묶인 scheduled-capture v1 affirmative opt-in, 또는 독립된 3-provider external-summary v5 동의
사용자 제어
일정별 자동 녹음 해제, 오늘 준비 취소, 즉시 중지, SoriCue 기기 연결 해제, Biz PT 가져오기 취소, 자동 제출·더블 프롬프트 해제, Chrome 권한 철회, 기기 데이터 삭제·로그아웃·계정 삭제·확장 제거
보존·삭제 한계
device-bound 실행 일정 snapshot은 최대 500개 occurrence·90일, content-free run ledger는 최대 100개·30일, 성공한 Biz PT import receipt는 최대 16개·24시간 동안 extension local storage에만 보관; import recovery status는 1개만 보관하며 reading은 최대 10분, terminal 상태는 최대 24시간; 취소·삭제 감소 재확인 marker는 content-free 1개·최대 2분이며 활성 SoriCue user/device binding이 끝나면 더 일찍 제거; account-owned Biz PT 원본은 별도 Supabase 보유 계약을 따름; capture lease는 당일 종료/최대 24시간; PCM은 gate 메모리에서만 처리하고 확장 storage에 녹음/받아쓴 내용을 저장하지 않음. 붙여넣기/제출 뒤 선택한 ChatGPT, Gemini 또는 Claude 계정과 provider 정책 적용. 준비 취소·기기 연결 해제·로그아웃·계정 전환/삭제가 관련 track/alarm/snapshot/run ledger/import receipt/recovery status/감소 재확인 marker를 정리하며 확장 제거 시 Chrome이 local extension state를 제거함; 이미 완료된 provider 요청은 회수할 수 없음

SoriCue content-free operational diagnostics

activeinternal-component
목적·trigger
로그만으로 사용자 시도·직전 상태·실행 code path·예상 다음 단계·실제 도달 단계와 관측된 종료 주체를 재구성하고 누락·불일치 incident를 판정앱/세션·router·visibility·network lifecycle, 기능 action, 녹음·캡처·받아쓰기·요약·예약 단계, 상태 전이, alarm, workspace/binding, 웹↔확장 메시지, API·queue·quota, unhandled 오류 또는 확장 restart/context invalidation의 허용 event가 생성되거나 offline 전달을 재시도할 때
데이터
인증된 SoriCue 사용자 ID, UUID event ID, 운영 occurredAt/서버 receivedAt, allowlist eventName·result·failureCode, session/tab/operation/trace SHA-256, incident UUID, required allowlist source·moduleId·codePathId·actionId, from/to state와 web/extension 공통 stateAction/stateReason, expected next event·deadline, producer release ID·git commit과 별도 ingest release ID·git commit·identity source·extension version, duration·attempt·queue depth·HTTP status와 terminal reason/actor; 오류일 때만 allowlist error class·digest·message SHA-256·최대 8개 프로젝트 module/codePath/line/column frame. event 내부 service-only deadline metadata는 UUID claim token·DB claim/lease 시각·claimed generation·평가 시각·completed/context_overflow enum만 저장함. service-only reconcile state는 사용자 ID·opaque 64hex correlation scope hash·단조 증가 next generation·단조 증가 last reconciled generation counter·DB 관리 updated/expires 시각만 저장하고 진단 payload를 저장하지 않음. payload-free singleton round-robin scheduler는 마지막 사용자 pointer와 DB update 시각만 저장함. 신뢰 가능한 인증 subject가 없을 수 있는 Next.js instrumentation onRequestError와 proxy request-error 경계는 별도 사용자 비연결 table에 UUID v1–v8·발생/수신 시각·next_server·release/commit·allowlist route group/HTTP method·두 exact code path 중 하나·allowlist error class·선택적 error digest SHA-256·message SHA-256·최대 8개 enum-allowlist 프로젝트 frame만 저장하고, 별도 1분 global·release/route·fingerprint bucket에는 accepted·포화형 dropped count와 expiry만 둠. web producer는 HTML에 렌더링된 공개·비권한 HMAC proof를 typed event record와 분리된 IndexedDB row에 enqueue 시점부터 보존하고 서버가 검증하며, proof 원문은 Postgres typed event/incident column에 저장하지 않음. random per-tab nonce는 sessionStorage에만 두고 event에는 SHA-256 tabHash만 저장하며 same-tab reload 동안 유지되고 계정 전환·logout·기기/계정 purge 때 회전 또는 삭제됨. occurredAt/receivedAt은 시스템 event의 발생·수신 시각이며 일정 제목이나 사용자가 입력한 정확한 개인 수업 시각이 아님
최소 수집
strict schema·재귀 redaction·typed wire event 8KiB·batch 최대 50개·process burst guard와 service-role-only 사용자별 rolling 1분 60 request/3,000 event DB limit을 적용하고 미허용 필드는 거부. keepalive final body는 proof map 포함 56KiB 이하로 동적 분할하고 non-final 20–50개·마지막 remainder만 20개 미만이며 sendBeacon을 쓰지 않음. Postgres는 개별 제약 typed column만 사용하고 임의 event payload·broad JSON object를 저장하지 않으며 최대 8개 project frame만 exact-schema·enum 검증 JSON array로 둠. deadline metadata는 UUID·DB 시각·generation·completed/context_overflow enum뿐이고 client 입력·인증 사용자 응답·operator export에서 제외. generation을 fresh context 전에 예약하고 lifecycle은 target+opaque lineage-guard dual-generation CAS를 사용함. null·expired·mismatch claim은 incident를 쓸 수 없고 1,000개 초과 context는 truncate하지 않고 context_overflow로 fail closed하여 false incident를 만들지 않음. well-formed stale/invalid build proof는 해당 event만 unknown-producer로 강등하고 claimed release/commit을 신뢰하지 않으며 malformed·extra·event mismatch는 400. 채팅·prompt·AI 응답, 받아쓴 내용·요약·오디오, 이름·email·일정 제목·메모·정확한 개인 수업 시각, 입력값·key 입력·clipboard, 화면·DOM·session replay, URL query, body·raw header/error, cookie·JWT·Authorization·session·password·Supabase/provider/API/service_role key, raw tab nonce·로컬 경로·IP·위치를 저장하지 않음. 사용자 비연결 service-error table도 user ID·payload·URL/query·body/header·cookie/token/session·IP/location·content·local path·raw error·source map을 거부하고, 같은 UTC 분의 release·route·method·code path·class·선택적 digest·message fingerprint가 모두 일치할 때만 dedupe하며 global 600·release/route 120·fingerprint 10 accepted cap과 별도 포화형 dropped count를 적용. 기본-off Full Diagnostic은 개인 allowlist와 browser toggle을 모두 요구하고 server path는 content-free subset만 허용하며 provider 원본 결과·오디오는 local-only임
전송 경로
SoriCue-origin localStorage와 사용자별 SHA-256 owner IndexedDB outbox 및 extension-private SHA-256 partition → expected-subject와 인증 session subject를 대조하는 same-origin `/api/debug/client-event` → server-only service_role admin client → atomic typed persist RPC → RLS를 강제하고 anon/authenticated 직접 권한을 회수한 Supabase Postgres typed event·incident table과 사용자+opaque correlation scope hash별 service-only reconcile state. 새 event와 scope generation 증가는 한 transaction이며 duplicate ID는 generation을 증가시키지 않음. event table은 service_role direct select/delete만 허용하고 INSERT/UPDATE는 회수함. deadline은 service-only claim RPC, incident write·resolution과 live-claim consumption은 atomic reconcile RPC만 허용하며 direct incident INSERT/UPDATE와 direct deadline UPDATE는 거부. Next.js instrumentation onRequestError는 durable persist RPC ACK 또는 실제 1.8초 abort/rejection까지 await하고 proxy request-error는 같은 bounded fail-open sink를 waitUntil로 예약한 뒤 원래 오류를 즉시 다시 던짐. 별도 사용자 비연결 service-error table의 service_role 직접 권한은 select만 두고 저장은 전용 atomic persist RPC·삭제는 bounded cleanup RPC로 제한. Storage object-per-log 쓰기는 0. 전용 server-only bearer의 no-store private operator cursor export는 앱 ingest·per-user account export와 분리되며 claim/lease/generation/scheduler/evaluation metadata를 제외하고 사용자 비연결 service error를 승인된 Mac의 `events/YYYY/MM/DD/service-errors.ndjson`와 일별 report에도 보관함
처리 근거
서비스 안정성과 보안을 위한 최소 진단
사용자 제어
서버가 영구 수락한 event만 browser/extension outbox에서 ACK 삭제. 로그아웃·계정 전환·기기 데이터 삭제·회원 탈퇴 시 대상 사용자의 local row와 해당 tab nonce를 제거하고 content-free purge generation·UUID·시각으로 이전 탭 재기록을 차단; 회원 탈퇴 job이 중앙 event·incident를 명시적으로 삭제하고 event 내부 claim/evaluation metadata와 reconcile state는 auth.users FK cascade로 삭제하며 singleton scheduler pointer는 SET NULL. generation을 fresh context 전에 예약하고 atomic reconcile RPC의 live token·target+optional lineage generation CAS가 stale worker와 resolved incident 재열기를 차단. context가 1,000개 typed row를 넘으면 incident 생성·해결 없이 context_overflow로 fail closed하고 다음 사용자를 계속 처리. 운영자는 Mac 보존 설정·prune·날짜 기준 삭제·lowercase 64hex userHash 기반 delete-user·uninstall을 실행할 수 있음
보존·삭제 한계
SoriCue-origin 일정 진단은 사용자별 최대 400개·14일, 실패 전달 IndexedDB outbox는 사용자별 최대 256개·14일 또는 성공 전송까지이며 cleanup은 다음 관련 활동 때 lazy하게 실행. 확장 private partition은 계정 hash별 최대 800개·512KiB·30일, event당 4KiB, 최근 partition 최대 8개. Supabase Postgres 구조화 event·incident와 사용자 비연결 service error는 기본 최대 30일이며 service error는 계정 삭제가 아니라 expiry cleanup으로 제거. reconcile state는 마지막 state 활동 후 최대 30일이며 만료 cleanup 또는 더 이른 auth.users cascade로 삭제. payload-free singleton scheduler pointer는 다음 round-robin advance 또는 사용자 삭제 SET NULL까지. Mac 운영 archive는 service error 사본을 포함해 기본 365일이며 설정 가능; launchd는 로그인 시와 5분마다 실행. content-free purge marker는 다음 purge 또는 site data 삭제까지. Supabase project의 region·backup 순환과 승인된 Mac 운영 장비의 암호화·접근·보존 정책 적용; export token은 stdin-only interactive security import와 readback 검증을 거쳐 macOS Keychain에만 저장하고 argv·URL·source·log·plist에 두지 않으며 managed symlink chain은 fail closed. 중앙 원본 삭제 뒤 Supabase backup 사본은 순환 시까지 남을 수 있고, 사용자 비연결 service error는 user ID가 없어 계정 삭제로 선택할 수 없음. Mac archive 사본은 자동 삭제되지 않으며 server rights/export workflow가 제공한 lowercase 64hex userHash만 delete-user에 사용하고 email·name·user UUID는 사용하지 않음. matching event·incident·pending과 영향 report만 정리하고 다른 사용자·service error·legacy record를 보존함. 승인된 operator console 사본도 별도 권리 요청·운영 보존 정책을 따르며 진단 실패는 녹음·받아쓰기·예약 본 기능을 막지 않음

SoriCue allowlisted Full Diagnostic

activeinternal-component
목적·trigger
개인 허용 계정의 받아쓰기 품질 이상을 원래 받아쓰기 흐름에 영향을 주지 않는 shadow observer로 심층 진단서버 전용 FULL_DIAGNOSTIC_ENABLED가 true이고 정확한 Supabase Auth UUID가 server-only allowlist에 있으며, 그 사용자가 해당 브라우저에서 Full Diagnostic Shadow Mode를 직접 켠 동안만; 품질 이상 오디오는 별도 기본-off 선택을 켠 경우만
데이터
별도 local IndexedDB의 받아쓰기 단계·timing·크기·반복·hash·안전 오류, provider 원본 결과·timestamp; 별도 선택 시 이상이 감지된 기존 provider audio window. 서버로는 최대 20개 batch의 content-free 단계·집계·hash·안전 오류만 보내고 오디오 bytes·provider 원본 결과·prompt·API key는 보내지 않음
최소 수집
전체 사용자에게 활성화하지 않고 정확한 UUID allowlist와 사용자 toggle을 모두 요구. 사건 최대 50개·총 8MiB·7일, 사건별 200 event·event당 4KiB, queue 최대 256개·64MiB, provider 결과 최대 50개·총 8MiB·row 2MiB, 선택 오디오 최대 20개·50MiB·24시간; content-free 기본 운영 진단 Postgres schema와 섞지 않음
전송 경로
허용된 사용자 브라우저의 별도 `soricue-full-diagnostics-v1` IndexedDB; strict content-free subset만 allowlist를 재검증하는 same-origin Full Diagnostic endpoint의 redacted process console로 전달. provider 원본 결과와 오디오는 브라우저를 떠나지 않고 운영 진단 Postgres·Mac collector로도 전달하지 않음
처리 근거
개인 사용자의 명시적 활성화에 따른 품질 진단과 고객 지원
사용자 제어
Shadow Mode 켜기/끄기, 오디오 보존 별도 켜기/끄기, local JSON 내보내기, 이 기기의 Full Diagnostic 전체 삭제. allowlist 회수 때는 기능을 먼저 끄고 cleanup-only 기간을 유지한 뒤 UUID를 제거
보존·삭제 한계
local 사건과 provider 원본 결과는 최대 7일, 선택 오디오는 최대 24시간; 한도 초과 시 진단만 버리고 받아쓰기 흐름은 계속. server content-free console metadata는 host 정책을 따름. local export를 사용자가 별도로 보관하면 사용자가 삭제할 때까지; server console은 배포 운영자의 제한된 보존 정책 적용. 기기 삭제는 이미 사용자가 저장한 local export나 operator console 사본을 회수하지 않음. 기능 비활성·allowlist 제외 계정에는 새 Full Diagnostic UI·endpoint 권한이 없으며 기본 운영 진단이 이를 대신해 오디오/provider 결과를 수집하지 않음

SoriCue pseudonymous Product UX analytics

activeinternal-component
목적·trigger
받아쓰기 시작·완료 funnel, 기록 활용, Google Sheets 연결→내보내기, 다음 행동·이탈과 중앙 소요시간을 content-free 집계로 확인해 제품 흐름 개선현재 필수 개인정보 동의가 유효한 인증 사용자가 allowlisted 화면·기능 action을 실행할 때 best-effort로 전송하며, 제품 동작이나 진단 적재 성공 조건으로 사용하지 않음
데이터
전용 server-only HMAC salt로 만든 pseudonymous subject, journey별 무작위 session UUID·sequence, allowlisted route·action ID·outcome, 최대 24시간으로 제한한 duration, online/offline/file mode, mobile/tablet/desktop viewport 및 server-derived UTC 달력 날짜. raw 사용자 ID와 exact event timestamp는 event table에 저장하지 않음
최소 수집
strict schema가 unknown field를 거부하고 same-origin·인증·body 2KiB·process당 120회/분 제한과 DB의 pseudonymous subject·UTC 날짜별 10,000행 상한을 적용. 받아쓴 내용·받아쓰기 hash·prompt·AI 답변·회원/일정/파일명·정확한 시각·email·token·API key·audio·DOM text·session replay는 수집하지 않음
전송 경로
현재 개인정보 동의가 유효한 사용자 브라우저 → 인증된 same-origin `/api/ux-events` → 전용 HMAC pseudonym을 만드는 server-only runtime → service-role admin client → RLS 보호 Supabase Postgres. `anon`/`authenticated` 직접 table·function 권한은 없으며 관리자는 원본 pseudonym이 아닌 aggregate만 조회
처리 근거
고지된 제품 개선 목적과 현재 필수 개인정보 동의 버전; 마케팅 동의·광고 cookie와 무관
사용자 제어
Google 재인증 회원 탈퇴가 시작되면 해당 HMAC subject의 새 적재를 차단하고 row를 삭제하며, Auth 삭제 뒤 한 번 더 purge. 사용자 기능은 분석 전송·저장 실패와 무관하게 계속 동작
보존·삭제 한계
Supabase event는 오늘을 포함해 최대 90개 UTC 달력 날짜. 인증된 일일 Cron과 ingest/admin 요청 시 만료 row를 정리하고, 잔존 access token 차단용 HMAC tombstone은 날짜만 담아 최대 31개 UTC 달력 날짜 뒤 삭제. Supabase project의 확정 region·backup 순환 정책 적용; 별도 third-party analytics SDK·cookie·session replay provider 없음. 원본 row 삭제 뒤 Supabase backup 사본은 프로젝트 순환 시까지 남을 수 있음. HMAC tombstone은 탈퇴 뒤 재적재 차단에 필요한 날짜-only 값으로 최대 31개 UTC 달력 날짜 유지되며 raw 사용자 ID·event·exact timestamp를 포함하지 않음

ChatGPT / Gemini / Claude 웹 전달

activeuser-selected-provider
목적·trigger
선택한 외부 사이트에서 받아쓴 내용 기반 단일 요약 또는 새 대화 탭 2개의 선택형 병렬 요약정상 또는 확정 저장된 partial 받아쓰기 뒤 ChatGPT·Gemini·Claude 통합 v5 자동 제출 동의가 유효하거나 사용자가 수동 보내기를 실행할 때; 병렬 실행은 별도 doublePromptAllowed 동의가 있을 때만
데이터
정상 완료 또는 확정 저장된 partial 받아쓴 내용과 1차 요약 지시문; 선택 시 동일한 받아쓴 내용과 두 번째 요약 지시문을 별도 provider 새 대화 탭에 한 번 더 전달
최소 수집
두 탭은 대화 문맥을 공유하지 않아 각 payload에 필요한 받아쓴 내용만 포함하고 1차 AI 응답 전문은 전달하지 않음; 오디오·SoriCue 로그인 cookie·provider API key는 전달하지 않으며 AI 답변 전문을 SoriCue server/log에 저장하지 않음
전송 경로
SoriCue 브라우저 → 로컬 확장 → 선택한 ChatGPT/Gemini/Claude의 서로 다른 새 대화 입력창 2개에 병렬 제출, SoriCue server 경유 없음
처리 근거
ChatGPT·Gemini·Claude 통합 v5 붙여넣기·자동 제출 동의와 별도 두 탭 병렬 더블 프롬프트 동의 또는 수동 보내기 동작; scheduled-capture 동의와 독립
사용자 제어
통합 자동 전송/제출 동의 철회·더블 프롬프트 해제, 수동 전송 전 전체 preview, 로컬 copy/TXT 대안, 열린 각 provider 대화의 생성 중지·계정 내 삭제
보존·삭제 한계
3-provider 통합 동의는 이 기기에서 철회·로그아웃·계정 전환·기기 데이터 삭제·회원 탈퇴까지 유지하고 중요 고지 변경 시 재동의; 병렬 prompt/transcript payload는 두 탭 제출 확인까지만 확장 메모리에서 처리하고 extension storage에 저장하지 않으며 구버전 순차 attempt 호환 상태는 최대 24시간. 제출된 transcript/prompt와 provider가 생성한 답변은 선택한 consumer account의 provider 정책·설정에 따름. 전송 후 SoriCue는 두 외부 대화의 transcript/prompt/답변 사본을 회수할 수 없어 해당 계정에서 사용자가 각각 삭제해야 함; worker restart나 한쪽 제출 실패로 완료 여부가 불명확하면 unknown_in_flight로 표시하고 자동 재제출하지 않음

BYO Supabase runtime

containedsubprocessor
목적·trigger
고객 소유 저장소 연결을 위한 미래 기능안전 재설계가 완료되기 전에는 실행되지 않음
데이터
활성 제품 모드의 customer project API 호출과 transcript/key/audio 쓰기 0
최소 수집
public route가 auth, cookie, request body, Management API보다 먼저 404/409로 종료
전송 경로
비활성; Supabase Management 또는 고객 project network 요청 0
처리 근거
비활성
사용자 제어
새 연결 불가; 역사적 고객 project는 project owner가 관리
보존·삭제 한계
재설계 fixture 외에 새 BYO runtime 데이터 없음. 과거 고객 project 데이터는 고객 project 정책에 따름. 과거 customer-owned namespace는 project owner의 조치가 필요할 수 있음

Creator Brain 서버 폴더

containedinternal-component
목적·trigger
서버 filesystem 받아쓰기 내보내기를 위한 미래 기능source lock으로 실행되지 않으며 browser download만 지원
데이터
새 서버 filesystem 쓰기 0
최소 수집
원격 overwrite와 server folder writer 모두 source-locked
전송 경로
비활성; 사용자의 browser download만 사용
처리 근거
비활성
사용자 제어
TXT·JSON browser download와 session별 로컬 삭제
보존·삭제 한계
해당 없음. 해당 없음. 과거 host 파일은 해당 host 운영자가 정리해야 함