From 15659e2c57aa31b74e8b7e74dc4e8f80c698ea5b Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Thu, 27 Aug 2026 12:05:07 -0400 Subject: [PATCH] =?UTF-8?q?fix(tests):=20a=20Note's=20is=5Ftask=20cannot?= =?UTF-8?q?=20be=20set=20=E2=80=94=20status=20is=20what=20makes=20one=20(#?= =?UTF-8?q?3099)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The spike CHECK tests constructed Note(is_task=True). `is_task` is a derived read-only property — `status is not None` — so SQLAlchemy raised "property 'is_task' of 'Note' object has no setter" before any row reached the database. All three failed for that, not for anything about migration 0091; the other 80 integration tests passed, including 0090's. status="todo" is what makes a note a task. Noted inline, since the field appears in to_dict output and reads like an ordinary column from there. Co-Authored-By: Claude Opus 5 (1M context) --- tests/test_integration_task_kind_spike.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/test_integration_task_kind_spike.py b/tests/test_integration_task_kind_spike.py index a2e528b..3f8a2ea 100644 --- a/tests/test_integration_task_kind_spike.py +++ b/tests/test_integration_task_kind_spike.py @@ -32,8 +32,11 @@ async def owner_id(): async def _write(uid: int, kind: str) -> int: async with async_session() as s: + # No is_task=: it is a derived read-only property (a note IS a task + # when status is not None), so passing it raises rather than being + # ignored. status="todo" is what makes this a task. note = Note( - user_id=uid, title=f"kind {kind}", body="", is_task=True, + user_id=uid, title=f"kind {kind}", body="", status="todo", task_kind=kind, ) s.add(note)