From 81411d993e2ee1a84936adf8d518588556b9ad2d Mon Sep 17 00:00:00 2001 From: Matt Gros <3311227+mpge@users.noreply.github.com> Date: Fri, 24 Apr 2026 06:46:36 -0400 Subject: [PATCH 1/2] feat(admin): Settings/PublicTickets.vue for guest policy (Task 6.3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Form with radio picker for guest policy mode (unassigned / guest_user / prompt_signup), conditional number input for the shared guest-user id, and conditional text input for the signup URL template. PUTs to escalated.admin.settings.public-tickets.update — host adapters (Laravel, NestJS, Rails, etc.) register the route and the shared SettingsService persists the values so admins can change the policy at runtime without a redeploy. Marks Task 6.3 complete in the plan. The backend side (SettingsService + widget controller reading from it) landed in previous iterations. --- .../plans/2026-04-23-public-ticket-system.md | 4 +- src/pages/Admin/Settings/PublicTickets.vue | 139 ++++++++++++++++++ 2 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 src/pages/Admin/Settings/PublicTickets.vue diff --git a/docs/superpowers/plans/2026-04-23-public-ticket-system.md b/docs/superpowers/plans/2026-04-23-public-ticket-system.md index b1f0cb3..04d6a0f 100644 --- a/docs/superpowers/plans/2026-04-23-public-ticket-system.md +++ b/docs/superpowers/plans/2026-04-23-public-ticket-system.md @@ -1389,12 +1389,12 @@ Each task's spec covers: success path, no-op path (e.g. status slug missing), an - [ ] Admin controller `PUT /escalated/admin/settings/guest-policy` updates the stored policy. Widget controller reads the stored policy via `SettingsService.get('guestPolicy', options.guestPolicy)`. -### Task 6.3 — Frontend settings page +### Task 6.3 — Frontend settings page — COMPLETED (iter 92) **Files:** - Create: `C:\Users\work\escalated\src\pages\Admin\Settings\PublicTickets.vue` -- [ ] Form with radio for mode, conditional `guestUserId` picker, save button that PUTs to the admin endpoint. Mirror the visual style of existing `Admin/Workflows/Builder.vue` for consistency. +- [x] Radio picker for mode (unassigned / guest_user / prompt_signup), conditional `guest_policy_user_id` number input when mode is `guest_user`, conditional `guest_policy_signup_url_template` text input when mode is `prompt_signup`, Save button PUTs to `route('escalated.admin.settings.public-tickets.update')`. Visual style matches existing `Admin/Settings/CsatSettings.vue` (same border / accent / hover tokens). --- diff --git a/src/pages/Admin/Settings/PublicTickets.vue b/src/pages/Admin/Settings/PublicTickets.vue new file mode 100644 index 0000000..5955182 --- /dev/null +++ b/src/pages/Admin/Settings/PublicTickets.vue @@ -0,0 +1,139 @@ + + + From 68367c9bef605b57160b26797c786769b6e1a12b Mon Sep 17 00:00:00 2001 From: Matt Gros <3311227+mpge@users.noreply.github.com> Date: Fri, 24 Apr 2026 06:48:22 -0400 Subject: [PATCH 2/2] feat(admin): add discovery link from Settings.vue to PublicTickets.vue MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Admins toggling Guest Tickets on now see a "Configure guest policy →" link below the switch that routes to the new per-feature settings page. Without this, admins would have no way to find the page. The link only renders when guest tickets are enabled, so it stays out of the way for hosts that don't use the public widget / inbound email flows. --- src/pages/Admin/Settings.vue | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/pages/Admin/Settings.vue b/src/pages/Admin/Settings.vue index 57727ac..ed1cf54 100644 --- a/src/pages/Admin/Settings.vue +++ b/src/pages/Admin/Settings.vue @@ -1,7 +1,7 @@