Add Task.snoozed_until recorded fact (snooze chunk 1/3: backend) - #359
Merged
Conversation
Port the control-plane half of the upstream snooze feature (REQ-027.1):
a single operator-owned attention-mute deadline recorded verbatim, with no
clock comparison in the control plane and no dashboard behaviour yet.
- core: Task.snoozed_until (optional ISO-8601 string, None = not snoozed)
- store: persist/round-trip it alongside url; Alembic migration for the column
- service: set_snooze records/clears it, leaving state/turn/blocked untouched
- api: SnoozeIn + PUT /tasks/{id}/snooze; snoozed_until on TaskOut/TaskSummaryOut
- client: set_snooze helper
The reserved indefinite value (9999-12-31...) is treated as an opaque string;
only the dashboard (a later chunk) special-cases it. No MCP tool: snooze is
dashboard-driven only. No attention field / piercing logic (dropped for this port).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This was referenced Aug 5, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ports the control-plane half of the upstream snooze feature (REQ-027.1) into this fork: a single operator-owned attention-mute deadline,
Task.snoozed_until, plus the REST/store/client plumbing to set and read it. No dashboard behaviour — that's a later chunk.The control plane stays deterministic and clock-free: it records the operator's timestamp verbatim and never compares it to a clock. Whether a finite deadline is active is left entirely to the dashboard.
What changed
models.py):Task.snoozed_until: str | None = None— an optional ISO-8601 string;Nonemeans not snoozed.store_sqlalchemy.py+ Alembic migration): persist/round-trip the column alongsideurl(nullableString).service.py):set_snoozerecords or clears the value, leavingstate/turn/blockeduntouched.api.py):SnoozeIn+PUT /tasks/{id}/snooze;snoozed_untilonTaskOutandTaskSummaryOut.client.py):set_snoozehelper.Notes
9999-12-31T23:59:59+00:00is treated as an opaque string by the backend; only the dashboard special-cases it.nullclears the snooze.blockedminus MCP.attentionfield and no piercing logic (dropped for this port).Out of scope (later chunks)
snoozed · Xh leftlabel.🤖 Generated with Claude Code