회기 무발화 0턴 분리, 자기예측 락 불변식 및 TDD 회귀 검증 완료
Some checks failed
API contract / OpenAPI type drift (push) Failing after 3m27s

This commit is contained in:
Yun Chan 2026-09-08 23:28:06 +09:00
parent a479db7a5a
commit a0311c5957
100 changed files with 4884 additions and 11210 deletions

View file

@ -627,6 +627,50 @@ class CalibrationTransferStoreTests(unittest.IsolatedAsyncioTestCase):
evidence_turn_ids=(),
)
async def test_append_prediction_revision_normalizes_legacy_instrument_id(self) -> None:
principal = _principal(Role.LEARNER)
learner_id = UUID(principal.user_id)
session_id = uuid4()
history_id = uuid4()
revision_id = uuid4()
conn = AsyncMock()
conn.fetchrow.side_effect = [
{"id": session_id, "learner_id": learner_id, "case_id": uuid4()},
None,
None,
{"prediction_revision_id": str(revision_id), "revision_no": 1},
]
@asynccontextmanager
async def fake_acquire(**_kwargs):
yield conn
with patch.object(calibration_transfer_store.db, "acquire", fake_acquire):
res = await calibration_transfer_store.append_prediction_revision(
principal=principal,
submission_id=uuid4(),
prediction_revision_id=revision_id,
history_id=history_id,
session_id=session_id,
competency_id="competency.empathic-check",
practice_block_id="oas-g5-block-one",
scenario_variant_id="variant-1",
phrase_family_id="phrase-1",
revision_no=1,
supersedes_prediction_revision_id=None,
predicted_success_probability=0.7,
confidence=0.8,
recorded_sequence=1,
revision_reason="호환성 검증",
instrument_id="vignette.calibration-self-prediction",
instrument_version="1.0.0",
evidence_turn_ids=(),
)
self.assertEqual(res["revision_no"], 1)
# Verify normalized instrument_id "calibration-mirror-g5" was passed to DB
call_args = conn.fetchrow.call_args_list[-1][0]
self.assertIn("calibration-mirror-g5", call_args)
async def test_evidence_refs_are_uuid_only(self) -> None:
self.assertEqual(
calibration_transfer_store._uuid_evidence(