# 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