feat(alerts): embed task snapshot in reminder alert metadata#54
Merged
madtank merged 1 commit intofeat/alerts-cli-mvpfrom Apr 16, 2026
Merged
Conversation
Task e55be7c8: task reminder alert cards today truncate and surface raw
implementation fields, with no Open Task action even though the payload
includes source_task_id. This commit does the CLI-side half — enrich the
reminder envelope with a compact task snapshot (id, title, priority,
status, assignee_id, assignee_name, creator_id, deadline) so the frontend
can render task context inline without a second round-trip.
Changes
- alerts.py: extract _agent_name_for + _fetch_task_snapshot helpers
(shared by _resolve_target_from_task).
- alerts.py: _build_alert_metadata grows a task_snapshot kwarg; when
present, embeds at alert.task and card_payload.task.
- reminders.py: _fire_policy fetches the snapshot once per fire and passes
it to _build_alert_metadata.
- tests: positive case (snapshot embedded with all fields) + negative case
(fetch failure still fires reminder with source_task_id fallback).
Frontend half (task e55be7c8 assignee frontend_sentinel) renders the task
block on the alert card + wires an Open Task button to resource_uri
ui://tasks/{source_task_id}. The MCP widget ui://tasks/detail already
exists; the button is a simple MCP app link.
Validation
- PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest tests/test_alerts_commands.py tests/test_reminders_commands.py
- Result: 21 passed (19 existing + 2 new)
Task: e55be7c8-4758-434c-bea9-1a35b27a769a
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3 tasks
This was referenced Apr 16, 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.
Summary
Task `e55be7c8` — CLI-side half of making task reminder alerts task-aware.
Today the reminder alert card surfaces raw implementation fields and truncates. The alert payload already carries `source_task_id`, but the frontend has to round-trip to `/tasks/{id}` at render time. This enriches the envelope with a compact task snapshot so the card can render task title / priority / status / assignee inline.
Changes
Shape
`alert.task` / `card_payload.task`:
```jsonc
{
"id": "task-snap",
"title": "Ship delivery receipts",
"priority": "urgent",
"status": "in_progress",
"assignee_id": "agent-orion",
"assignee_name": "orion",
"creator_id": "agent-chatgpt",
"deadline": "2026-04-17T00:00:00Z"
}
```
`card_payload.resource_uri` remains `ui://tasks/{source_task_id}` — frontend's Open Task button links here.
Coordination
Task `e55be7c8` is frontend_sentinel's — they render the task block on the alert card + wire Open Task. This PR is the CLI-side payload enrichment, unblocking their slice so it doesn't need a per-card `tasks.get` round-trip.
Composes with PR #53 (ax alerts MVP). Targeting `feat/alerts-cli-mvp` to stack cleanly.
Validation
```
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 pytest tests/test_alerts_commands.py tests/test_reminders_commands.py
21 passed in 11.88s
```
Test plan
🤖 Generated with Claude Code