70 lines
2.5 KiB
Markdown
70 lines
2.5 KiB
Markdown
# 02 Project Notification Settings UI
|
|
|
|
Implementation guide: [Ticket Implementation Guide](../ticket-implementation-guide.md)
|
|
|
|
## Branch
|
|
|
|
`codex/v0.5-webhook-notification/02-project-notification-settings-ui`
|
|
|
|
Start this branch from `codex/v0.5-webhook-notification/01-notification-action-foundation`.
|
|
|
|
## Goal
|
|
|
|
Add project settings UI for managing notification actions.
|
|
|
|
## Requirements
|
|
|
|
- Add a project settings page at `projects/{project}/settings/notifications`.
|
|
- Add a settings navigation link alongside general, board, ticket, and repository settings.
|
|
- Project admins can list, create, update, enable, disable, and delete project notification actions.
|
|
- The create and update forms support:
|
|
- name
|
|
- event type
|
|
- channel
|
|
- enabled flag
|
|
- delivery URL
|
|
- message template for Discord
|
|
- Existing secret URLs stay hidden after save.
|
|
- Updating an action only replaces the secret URL when a new URL is submitted.
|
|
- Show the fixed template variables in the UI: `$url`, `$ticket_key`, `$ticket_title`, `$project_name`, `$status_from`, `$status_to`, and `$actor_name`.
|
|
- Add frontend types under `resources/js/types`.
|
|
- Generate Wayfinder output for the new routes and controller methods.
|
|
|
|
## Acceptance Criteria
|
|
|
|
- Project admins can manage notification actions from project settings.
|
|
- Non-admin project users cannot access the notification settings page or mutate notification actions.
|
|
- Validation errors are shown next to the relevant form fields.
|
|
- Saved notification actions show their name, event type, channel, enabled state, and created or updated date without exposing the secret URL.
|
|
- Existing project settings pages continue to work.
|
|
|
|
## Tests
|
|
|
|
- Feature tests for page access, create, update, enable/disable, delete, validation, and authorization.
|
|
- Inertia prop assertions for the notification action list and template variable metadata.
|
|
- Regression test that secret URLs are not rendered back in page props.
|
|
|
|
## Verification
|
|
|
|
- `php artisan wayfinder:generate --with-form --no-interaction`
|
|
- `vendor/bin/pint --dirty --format agent`
|
|
- `php artisan test --compact tests/Feature/Projects`
|
|
- `npm run types:check`
|
|
- `git diff --check`
|
|
|
|
## Commit And Push
|
|
|
|
- Commit only this ticket's changes.
|
|
- Push with `git push origin codex/v0.5-webhook-notification/02-project-notification-settings-ui`.
|
|
|
|
## Out of Scope
|
|
|
|
- Ticket status changed event dispatch
|
|
- Actual webhook or Discord HTTP delivery
|
|
- Delivery attempt screens
|
|
- User bell notifications
|
|
- Unread counters
|
|
- Slack, Teams, email, or other channels
|
|
- Incoming webhooks
|
|
- API or MCP management endpoints
|