from session.models import SessionWindowState
from session.session_state import Commitment, SessionState, TaskState
from session.session_state_bridge import apply_session_state_bridge
def test_apply_session_state_bridge_maps_all_prd_fields():
state = SessionState()
state.update_task_state(
"sess-bridge",
TaskState(
objective="Complete compact PRD",
current_stage="bridge",
blockers=["Need sync frequency"],
),
)
state.add_commitment(
"sess-bridge",
Commitment(content="Keep fallback opt-in", status="fulfilled", kind="constraint"),
)
state.add_commitment(
"sess-bridge",
Commitment(content="Use soft merge markers", status="fulfilled", kind="decision"),
)
state.add_commitment(
"sess-bridge",
Commitment(content="Wire prefetch", status="open"),
)
window = SessionWindowState()
changed = apply_session_state_bridge(window, state, "sess-bridge", turn_count=5)
assert changed is True
assert window.active_task == "Complete compact PRD - bridge"
assert window.confirmed_constraints == ["Keep fallback opt-in"]
assert window.recent_decisions == ["Use soft merge markers"]
assert window.open_loops == ["Wire prefetch"]
assert window.uncertainties == ["Need sync frequency"]
assert window.session_state_version == state.get_version("sess-bridge")
assert window.session_state_synced_at
assert window.session_state_sync_turn_count == 5
def test_apply_session_state_bridge_noops_when_version_already_synced():
state = SessionState()
state.update_task_state("sess-bridge", TaskState(objective="First task"))
window = SessionWindowState()
apply_session_state_bridge(window, state, "sess-bridge", turn_count=1)
first_synced_at = window.session_state_synced_at
changed = apply_session_state_bridge(window, state, "sess-bridge", turn_count=2)
assert changed is False
assert window.active_task == "First task"
assert window.session_state_synced_at == first_synced_at
def test_apply_session_state_bridge_clears_stale_task_after_state_clear():
state = SessionState()
state.update_task_state("sess-clear", TaskState(objective="Old task"))
window = SessionWindowState()
apply_session_state_bridge(window, state, "sess-clear", turn_count=1)
assert window.active_task == "Old task"
state.clear_session("sess-clear")
changed = apply_session_state_bridge(window, state, "sess-clear", turn_count=2)
assert changed is True
assert window.active_task == ""
assert window.confirmed_constraints == []
assert window.recent_decisions == []
assert window.open_loops == []
assert window.uncertainties == []