from pathlib import Path import yaml from nexus.mempalace.config import CORE_ROOMS from nexus.mempalace.conversation_artifacts import ( ConversationArtifact, build_request_response_artifact, extract_alexander_request_pairs, normalize_speaker, ) def test_sovereign_room_is_core_room() -> None: assert "sovereign" in CORE_ROOMS rooms_yaml = yaml.safe_load(Path("mempalace/rooms.yaml").read_text()) assert any(room["key"] == "sovereign" for room in rooms_yaml["core_rooms"]) def test_normalize_speaker_maps_alexander_variants() -> None: assert normalize_speaker("Alexander Whitestone") == "alexander" assert normalize_speaker("Rockachopa") == "alexander" assert normalize_speaker(" ALEXANDER ") == "alexander" assert normalize_speaker("Bezalel") == "bezalel" def test_build_request_response_artifact_creates_sovereign_metadata() -> None: artifact = build_request_response_artifact( requester="Alexander Whitestone", responder="Allegro", request_text="Please organize my conversation artifacts.", response_text="I will catalog them under a sovereign room.", source="telegram:timmy-time", timestamp="2026-04-16T01:30:00Z", ) assert isinstance(artifact, ConversationArtifact) assert artifact.room == "sovereign" assert artifact.metadata["speaker_tags"] == ["speaker:alexander", "speaker:allegro"] assert artifact.metadata["artifact_type"] == "alexander_request_response" assert artifact.metadata["responder"] == "allegro" assert "## Alexander Request" in artifact.text assert "## Wizard Response" in artifact.text def test_extract_alexander_request_pairs_finds_following_wizard_response() -> None: turns = [ {"speaker": "Alexander Whitestone", "text": "Catalog my requests as artifacts.", "timestamp": "2026-04-16T01:00:00Z"}, {"speaker": "Allegro", "text": "I'll build a sovereign room contract.", "timestamp": "2026-04-16T01:01:00Z"}, {"speaker": "Alexander", "text": "Make sure my words are easy to recall.", "timestamp": "2026-04-16T01:02:00Z"}, {"speaker": "Allegro", "text": "I will tag them with speaker metadata.", "timestamp": "2026-04-16T01:03:00Z"}, ] artifacts = extract_alexander_request_pairs(turns, responder="Allegro", source="telegram") assert len(artifacts) == 2 assert artifacts[0].metadata["request_timestamp"] == "2026-04-16T01:00:00Z" assert artifacts[1].metadata["response_timestamp"] == "2026-04-16T01:03:00Z"