현재 작업 상태 저장

This commit is contained in:
Yun Chan 2026-06-27 11:20:24 +09:00
parent 07cc67761e
commit 6bd91b0d5e
674 changed files with 8726 additions and 298 deletions

View file

@ -11,6 +11,7 @@ AUTH_ALLOWED_EMAIL_DOMAINS=["hs.ac.kr","twentyoz.kr"]
AUTH_TEACHER_EMAILS=[]
AUTH_ADMIN_EMAILS=[]
AUTH_DEV_LOGIN_ENABLED=false
AUTH_DEV_LOGIN_EXTRA_ORIGINS=[]
DEFAULT_AFFILIATION=
AUTO_SEED_PERSONAS=false
ALLOW_SEED_PERSONA_FALLBACK=false
@ -19,10 +20,13 @@ OAUTH_GOOGLE_CLIENT_ID=
OAUTH_GOOGLE_CLIENT_SECRET=
OAUTH_REDIRECT_URI=https://api-vignette.chanpaca.net/auth/callback
FRONTEND_BASE_URL=https://vignette.chanpaca.net
CORS_ORIGINS=["https://vignette.chanpaca.net","https://vignette-b1q.pages.dev","http://localhost:5170","http://localhost:5171","http://localhost:5172","http://localhost:5173","http://localhost:5174","http://localhost:5175","http://localhost:5176","http://localhost:5177","http://localhost:5178","http://localhost:5179","http://localhost:5180","http://127.0.0.1:5170","http://127.0.0.1:5171","http://127.0.0.1:5172","http://127.0.0.1:5173","http://127.0.0.1:5174","http://127.0.0.1:5175","http://127.0.0.1:5176","http://127.0.0.1:5177","http://127.0.0.1:5178","http://127.0.0.1:5179","http://127.0.0.1:5180"]
FRONTEND_ORIGIN_MAP={"api-vignette.chanpaca.net":"https://vignette.chanpaca.net","api-vnet.18ka.net":"https://vnet.18ka.net"}
CORS_ORIGINS=["https://vignette.chanpaca.net","https://vnet.18ka.net","https://vignette-b1q.pages.dev","http://localhost:5170","http://localhost:5171","http://localhost:5172","http://localhost:5173","http://localhost:5174","http://localhost:5175","http://localhost:5176","http://localhost:5177","http://localhost:5178","http://localhost:5179","http://localhost:5180","http://127.0.0.1:5170","http://127.0.0.1:5171","http://127.0.0.1:5172","http://127.0.0.1:5173","http://127.0.0.1:5174","http://127.0.0.1:5175","http://127.0.0.1:5176","http://127.0.0.1:5177","http://127.0.0.1:5178","http://127.0.0.1:5179","http://127.0.0.1:5180"]
# For local-only compose development, set ENVIRONMENT=dev and add http://localhost:5173 to CORS_ORIGINS.
OPENAI_API_KEY=
OPENAI_BASE_URL=https://api.openai.com/v1
VIGNETTE_VOICE_POC_SAMPLE_TTS=false
VIGNETTE_VOICE_POC_SAMPLE_TTS_DIR=
ANTHROPIC_API_KEY=
# 엔진(이식성): 네 PC=claude_cli, 클라우드=claude_api
ENGINE_MODE=claude_cli

View file

@ -212,6 +212,68 @@ CREATE POLICY p_feedback_select ON app.feedback_scores FOR SELECT USING (
app.is_ai_context()
OR app.current_role_name() IN ('admin','instructor')
);
DROP POLICY IF EXISTS p_feedback_insert ON app.feedback_scores;
CREATE POLICY p_feedback_insert ON app.feedback_scores FOR INSERT WITH CHECK (
app.is_ai_context()
OR app.current_role_name() IN ('admin','instructor')
);
DROP POLICY IF EXISTS p_feedback_update ON app.feedback_scores;
CREATE POLICY p_feedback_update ON app.feedback_scores FOR UPDATE USING (
app.is_ai_context()
OR app.current_role_name() IN ('admin','instructor')
) WITH CHECK (
app.is_ai_context()
OR app.current_role_name() IN ('admin','instructor')
);
-- ── normalized turn evaluation tables: 원시 평가는 evaluator/admin만 직접 접근 ──
ALTER TABLE app.turn_technique ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS p_turn_technique_select ON app.turn_technique;
CREATE POLICY p_turn_technique_select ON app.turn_technique FOR SELECT USING (
app.is_ai_context()
OR app.current_role_name() IN ('admin','instructor')
);
DROP POLICY IF EXISTS p_turn_technique_insert ON app.turn_technique;
CREATE POLICY p_turn_technique_insert ON app.turn_technique FOR INSERT WITH CHECK (
app.is_ai_context()
OR app.current_role_name() IN ('admin','instructor')
);
ALTER TABLE app.turn_client_state ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS p_turn_client_state_select ON app.turn_client_state;
CREATE POLICY p_turn_client_state_select ON app.turn_client_state FOR SELECT USING (
app.is_ai_context()
OR app.current_role_name() IN ('admin','instructor')
);
DROP POLICY IF EXISTS p_turn_client_state_insert ON app.turn_client_state;
CREATE POLICY p_turn_client_state_insert ON app.turn_client_state FOR INSERT WITH CHECK (
app.is_ai_context()
OR app.current_role_name() IN ('admin','instructor')
);
ALTER TABLE app.supervisor_comment ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS p_supervisor_comment_select ON app.supervisor_comment;
CREATE POLICY p_supervisor_comment_select ON app.supervisor_comment FOR SELECT USING (
app.is_ai_context()
OR app.current_role_name() IN ('admin','instructor')
);
DROP POLICY IF EXISTS p_supervisor_comment_insert ON app.supervisor_comment;
CREATE POLICY p_supervisor_comment_insert ON app.supervisor_comment FOR INSERT WITH CHECK (
app.is_ai_context()
OR app.current_role_name() IN ('admin','instructor')
);
ALTER TABLE app.alternative_utterance ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS p_alternative_utterance_select ON app.alternative_utterance;
CREATE POLICY p_alternative_utterance_select ON app.alternative_utterance FOR SELECT USING (
app.is_ai_context()
OR app.current_role_name() IN ('admin','instructor')
);
DROP POLICY IF EXISTS p_alternative_utterance_insert ON app.alternative_utterance;
CREATE POLICY p_alternative_utterance_insert ON app.alternative_utterance FOR INSERT WITH CHECK (
app.is_ai_context()
OR app.current_role_name() IN ('admin','instructor')
);
-- ── case_profile / pinned_fact: 학습자=본인 케이스만(cross-trainee 누수 차단 T4) ──
ALTER TABLE app.case_profile ENABLE ROW LEVEL SECURITY;

View file

@ -44,12 +44,14 @@ services:
AUTH_TEACHER_EMAILS: '${AUTH_TEACHER_EMAILS:-[]}'
AUTH_ADMIN_EMAILS: '${AUTH_ADMIN_EMAILS:-[]}'
AUTH_DEV_LOGIN_ENABLED: ${AUTH_DEV_LOGIN_ENABLED:-false}
AUTH_DEV_LOGIN_EXTRA_ORIGINS: '${AUTH_DEV_LOGIN_EXTRA_ORIGINS:-[]}'
DEFAULT_AFFILIATION: ${DEFAULT_AFFILIATION:-}
AUTO_SEED_PERSONAS: ${AUTO_SEED_PERSONAS:-false}
ALLOW_SEED_PERSONA_FALLBACK: ${ALLOW_SEED_PERSONA_FALLBACK:-false}
EVALUATOR_GOLDEN_FEWSHOT_ENABLED: ${EVALUATOR_GOLDEN_FEWSHOT_ENABLED:-false}
FRONTEND_BASE_URL: ${FRONTEND_BASE_URL:-https://vignette.chanpaca.net}
CORS_ORIGINS: '${CORS_ORIGINS:-["https://vignette.chanpaca.net","https://vignette-b1q.pages.dev"]}'
FRONTEND_ORIGIN_MAP: '${FRONTEND_ORIGIN_MAP:-{"api-vignette.chanpaca.net":"https://vignette.chanpaca.net","api-vnet.18ka.net":"https://vnet.18ka.net"}}'
CORS_ORIGINS: '${CORS_ORIGINS:-["https://vignette.chanpaca.net","https://vnet.18ka.net","https://vignette-b1q.pages.dev"]}'
extra_hosts:
- "host.docker.internal:host-gateway"
healthcheck: