Ticket description never displayed on Show page #9

Closed
opened 2026-07-28 06:02:47 -07:00 by jwed · 1 comment
Owner

Persona: superadmin (agent view), but this affects all viewers since Show.vue has no persona-gated description block at all.

URL: https://central-dev.vancs.org/app/ticketing/9 (route ticketing.show)

Steps:

  1. Go to /app/ticketing/create, fill in Group, Title, and a required "Description" field
    (e.g. "Testing full CRUD cycle this sweep. XSS probe: ...").
  2. Submit the ticket.
  3. View the created ticket at /app/ticketing/{id}.

Expected: The description the submitter entered (a required field, prominently labeled
"Describe the issue in detail...") is visible somewhere on the ticket — either as the first
message in the thread, or in a dedicated "Description" block.

Actual: The description is nowhere on the show page. The message thread renders
ticket.messages only, and since no message exists yet it just shows "No messages yet." — as
if the submitter gave no details at all. The description is saved correctly server-side (it
appears back in the Edit form's Description textarea, confirming the round trip works and the
XSS payload was properly escaped there too), it's just never rendered on the read/agent view.

Impact: An agent opening a fresh ticket has no way to see what the problem actually is
without clicking into Edit — which for a non-agent/non-manager persona may not even be visible
(Edit link is v-if="isAgent"). This makes the core "submit a ticket describing an issue" flow
effectively broken: the one piece of information a submitter is required to provide vanishes
from view immediately after submission.

Root cause (confirmed by reading source): dashboard-shell/resources/js/Pages/Ticketing/Show.vue
only ever iterates ticket.messages in its thread section (~line 138-167); there is no
ticket.description reference anywhere in the file. Create.vue requires and posts a
description field, and Edit.vue has a Description textarea bound to it, but Show.vue was
apparently never updated to surface it.

Console errors: none.

Cleanup: ticket #QA-0001 (id 9) and the test group "QA Sweep Desk" will be deleted as part of
this same QA run's cleanup.


Filed automatically by the Claude-driven QA sweep (/opt/qa-agent). The marker below dedupes repeat reports — do not edit it.

**Persona:** superadmin (agent view), but this affects all viewers since Show.vue has no persona-gated description block at all. **URL:** https://central-dev.vancs.org/app/ticketing/9 (route `ticketing.show`) **Steps:** 1. Go to `/app/ticketing/create`, fill in Group, Title, and a required "Description" field (e.g. "Testing full CRUD cycle this sweep. XSS probe: ..."). 2. Submit the ticket. 3. View the created ticket at `/app/ticketing/{id}`. **Expected:** The description the submitter entered (a *required* field, prominently labeled "Describe the issue in detail...") is visible somewhere on the ticket — either as the first message in the thread, or in a dedicated "Description" block. **Actual:** The description is nowhere on the show page. The message thread renders `ticket.messages` only, and since no message exists yet it just shows "No messages yet." — as if the submitter gave no details at all. The description *is* saved correctly server-side (it appears back in the Edit form's Description textarea, confirming the round trip works and the XSS payload was properly escaped there too), it's just never rendered on the read/agent view. **Impact:** An agent opening a fresh ticket has no way to see what the problem actually is without clicking into Edit — which for a non-agent/non-manager persona may not even be visible (Edit link is `v-if="isAgent"`). This makes the core "submit a ticket describing an issue" flow effectively broken: the one piece of information a submitter is required to provide vanishes from view immediately after submission. **Root cause (confirmed by reading source):** `dashboard-shell/resources/js/Pages/Ticketing/Show.vue` only ever iterates `ticket.messages` in its thread section (~line 138-167); there is no `ticket.description` reference anywhere in the file. `Create.vue` requires and posts a `description` field, and `Edit.vue` has a Description textarea bound to it, but `Show.vue` was apparently never updated to surface it. **Console errors:** none. **Cleanup:** ticket #QA-0001 (id 9) and the test group "QA Sweep Desk" will be deleted as part of this same QA run's cleanup. --- _Filed automatically by the Claude-driven QA sweep (`/opt/qa-agent`). The marker below dedupes repeat reports — do not edit it._ <!-- claude-qa-fingerprint: 5cd83a30d6f8 -->
jwed added the e2e-failure label 2026-07-28 06:02:47 -07:00
Author
Owner

Fixed in dashboard-shell a3ad834 (the Vue pages for snap-ins live in the shell).

ticket.description was always in the props — TicketController::show() passes the whole model — and Show.vue simply never rendered it. Since the thread renders ticket.messages only and a new ticket has none, a freshly-raised ticket showed "No messages yet.", which is exactly the "as if the submitter gave no detail" impression you described.

It now renders as its own Description block above the thread, rather than being injected as a synthetic first message: a description has no author, no timestamp of its own, cannot be replied to or marked internal, and faking a message would put it in a list where every other entry is a real ticket_messages row. The empty-thread text now reads "No replies yet." when a description is present, since "no messages" was the misleading part.

Fixed in dashboard-shell a3ad834 (the Vue pages for snap-ins live in the shell). `ticket.description` was always in the props — `TicketController::show()` passes the whole model — and `Show.vue` simply never rendered it. Since the thread renders `ticket.messages` only and a new ticket has none, a freshly-raised ticket showed "No messages yet.", which is exactly the "as if the submitter gave no detail" impression you described. It now renders as its own **Description** block above the thread, rather than being injected as a synthetic first message: a description has no author, no timestamp of its own, cannot be replied to or marked internal, and faking a message would put it in a list where every other entry is a real `ticket_messages` row. The empty-thread text now reads "No replies yet." when a description is present, since "no messages" was the misleading part.
jwed closed this issue 2026-07-28 09:43:42 -07:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jwed/central-ticketing#9