68 lines
2.4 KiB
Markdown
68 lines
2.4 KiB
Markdown
# 03 Ticket Status Changed Trigger
|
|
|
|
Implementation guide: [Ticket Implementation Guide](../ticket-implementation-guide.md)
|
|
|
|
## Branch
|
|
|
|
`codex/v0.5-webhook-notification/03-ticket-status-changed-trigger`
|
|
|
|
Start this branch from `codex/v0.5-webhook-notification/02-project-notification-settings-ui`.
|
|
|
|
## Goal
|
|
|
|
Trigger notification deliveries when a ticket status actually changes.
|
|
|
|
## Requirements
|
|
|
|
- Add a `TicketStatusChanged` event or equivalent internal event object.
|
|
- Emit the event from the existing ticket move action only when the ticket moves to a different status.
|
|
- Do not emit the event for no-op moves where the destination status is already current.
|
|
- Build a reusable event payload that includes:
|
|
- project id, key, and name
|
|
- ticket id, key, title, and absolute ticket URL
|
|
- actor id and name when available
|
|
- origin status id and label
|
|
- destination status id and label
|
|
- occurred timestamp
|
|
- Add a listener or action that finds enabled project notification actions for `ticket_status_changed`.
|
|
- Queue one delivery job per matching action.
|
|
- Keep existing worklog behavior for status changes.
|
|
|
|
## Acceptance Criteria
|
|
|
|
- Moving a ticket to a new status queues delivery jobs for all enabled matching actions in the ticket project.
|
|
- Disabled actions are ignored.
|
|
- Actions from other projects are ignored.
|
|
- No-op moves do not queue delivery jobs.
|
|
- Ticket movement responses and worklog entries remain unchanged.
|
|
|
|
## Tests
|
|
|
|
- Ticket move feature tests asserting jobs are queued for enabled matching actions.
|
|
- Tests asserting disabled, foreign-project, and wrong-event actions are ignored.
|
|
- Test asserting no-op moves do not dispatch notifications.
|
|
- Test asserting the event payload contains the expected ticket URL and status labels.
|
|
|
|
## Verification
|
|
|
|
- `vendor/bin/pint --dirty --format agent`
|
|
- `php artisan test --compact tests/Feature/Projects tests/Feature/Notifications`
|
|
- `php artisan test --compact tests/Feature/Api/TicketApiTest.php tests/Feature/Mcp`
|
|
- `git diff --check`
|
|
|
|
## Commit And Push
|
|
|
|
- Commit only this ticket's changes.
|
|
- Push with `git push origin codex/v0.5-webhook-notification/03-ticket-status-changed-trigger`.
|
|
|
|
## Out of Scope
|
|
|
|
- Actual webhook HTTP request execution
|
|
- Actual Discord HTTP request execution
|
|
- Delivery attempt UI
|
|
- User bell notifications
|
|
- Unread counters
|
|
- Slack, Teams, email, or other channels
|
|
- Incoming webhooks
|
|
- API or MCP management endpoints
|