세션 평가와 교수자 분석 보강

This commit is contained in:
Yun Chan 2026-07-01 12:10:52 +09:00
parent 5c4ac04e06
commit fe2796f05a
51 changed files with 4928 additions and 240 deletions

View file

@ -146,7 +146,7 @@ class RuntimeFallbackPolicyTest(unittest.IsolatedAsyncioTestCase):
"has_engine_config": False,
"has_session_columns": False,
"has_state_columns": False,
"has_turn_provider_events": False,
"has_turn_voice_metadata_columns": False,
"has_session_review_worksheet_columns": False,
"has_stage_defs": False,
"has_admin_health_event": False,
@ -185,6 +185,50 @@ class RuntimeFallbackPolicyTest(unittest.IsolatedAsyncioTestCase):
self.assertIn("runtime DB schema is incomplete", str(caught.exception))
async def test_runtime_readiness_requires_all_turn_voice_metadata_columns(self) -> None:
class VoiceMetadataDriftConn:
def __init__(self) -> None:
self.query = ""
async def fetchrow(self, query: str, *args, **kwargs):
self.query = query
return {
"has_user_columns": True,
"has_persona_triggers": True,
"has_persona_voice_map": True,
"has_auth_session": True,
"has_preferences": True,
"has_engine_config": True,
"has_session_columns": True,
"has_state_columns": True,
"has_turn_voice_metadata_columns": False,
"has_session_review_worksheet_columns": True,
"has_stage_defs": True,
"has_admin_health_event": True,
"has_admin_health_daily_rollup": True,
"has_admin_health_daily_rollup_columns": True,
"has_support_ticket": True,
"has_support_ticket_duplicate_columns": True,
"has_learner_prepost_measure": True,
"has_admin_health_event_policies": True,
"has_admin_health_daily_rollup_policies": True,
"has_support_ticket_policies": True,
"has_learner_prepost_measure_policies": True,
"has_session_write_policies": True,
"removed_old_session_policy": True,
"has_turn_write_policies": True,
"removed_old_turn_policy": True,
}
conn = VoiceMetadataDriftConn()
ready = await auth_sessions._runtime_tables_ready(conn)
self.assertFalse(ready)
for column in ("audio_ref", "silence_ms", "speech_rate", "barge_in", "provider_events"):
self.assertIn(column, conn.query)
self.assertIn("HAVING count(*) = 5", conn.query)
async def test_staging_uses_env_engine_config_when_row_missing(self) -> None:
class EmptyConfigConn:
async def fetchrow(self, *args, **kwargs):