Continue a timed Today break across devices #1039

Merged
rockachopa merged 2 commits from timmy/1038-cross-device-today-break into main 2026-08-17 20:23:07 +00:00
2 changed files with 14 additions and 0 deletions
Showing only changes of commit dfd33aee1c - Show all commits

View File

@ -596,6 +596,12 @@ class TodaySessionUpdate(BaseModel):
running: bool
break_deadline_at: int | None = Field(default=None, ge=0, le=10_000_000_000_000)
@model_validator(mode="after")
def validate_break_is_paused(self):
if self.running and self.break_deadline_at is not None:
raise ValueError("break must remain paused")
return self
class TodayRecapTimeLog(TodayRecap):
log_identities: list[str] = Field(min_length=1, max_length=20)

View File

@ -92,6 +92,14 @@ async def test_active_session_api_persists_a_bounded_break_deadline(monkeypatch,
assert (await main.get_today_session()) == saved
def test_active_session_api_rejects_a_running_break():
with pytest.raises(ValueError, match="break must remain paused"):
main.TodaySessionUpdate(
base_revision=0, device_id="phone-a", identity="issue:r:1:",
elapsed_ms=5_000, running=True, break_deadline_at=1_800_000,
)
@pytest.mark.anyio
async def test_active_session_api_returns_current_state_on_claim_conflict(monkeypatch, tmp_path):
async def user():