Skip to main content

Data Model: Report a Problem & Ticket Integration

Feature: 094-report-a-problem | Date: 2026-03-17

Entities​

TicketConfig​

Derived from environment variables. Part of the existing Config interface in ui/src/lib/config.ts.

FieldTypeSource Env VarDefaultDescription
jiraTicketEnabledbooleanJIRA_TICKET_ENABLEDfalseWhether Jira ticket creation is available
jiraTicketProjectstring | nullJIRA_TICKET_PROJECTnullJira project key (e.g., OPENSD)
githubTicketEnabledbooleanGITHUB_TICKET_ENABLEDfalseWhether GitHub issue creation is available
githubTicketRepostring | nullGITHUB_TICKET_REPOnullGitHub repository (e.g., org/repo)

Derived fields (computed, not stored):

FieldTypeLogic
ticketEnabledbooleanjiraTicketEnabled || githubTicketEnabled
ticketProvider'jira' | 'github' | nullJira takes precedence if both enabled

TicketRequest​

Transient object constructed in ticket-client.ts before sending the A2A prompt. Not persisted.

FieldTypeRequiredDescription
descriptionstringYesUser's problem description
userEmailstringYesReporter's email from session
contextUrlstringYesCurrent page URL (chat URL if on chat page)
provider'jira' | 'github'YesTarget ticket provider
projectstringYesJira project key or GitHub org/repo
feedbackContextFeedbackContext | undefinedNoOptional feedback details for combo flow

FeedbackContext​

Optional context attached when creating a ticket from the feedback dialog.

FieldTypeDescription
reasonstringSelected feedback reason (e.g., "Inaccurate", "Off-topic")
additionalFeedbackstring | undefinedFree-text "Other" feedback
feedbackType'like' | 'dislike'Whether this was positive or negative feedback

TicketResult​

Extracted from the final_result A2A artifact after successful ticket creation.

FieldTypeDescription
idstringTicket identifier (e.g., OPENSD-1234, #42)
urlstringDirect URL to the created ticket
provider'jira' | 'github'Which provider created the ticket

State Transitions​

ReportProblemDialog State Machine​

idle ──[submit]──> submitting ──[success]──> success ──[close]──> idle
│
└──[error]──> error ──[retry]──> submitting
│
└──[close]──> idle
StateUIUser Actions
idleText input + submit buttonType description, submit, cancel
submittingProgress bar + streaming logShow/hide details, cancel
successTicket ID/link + done buttonClose dialog
errorError messageRetry, copy description, close

Relationships​

Config (env vars)
├── TicketConfig (jira/github settings)
│ └── determines: ticketEnabled, ticketProvider
│
ReportProblemDialog
├── reads: TicketConfig (from Config)
├── builds: TicketRequest (from user input + session + URL)
├── calls: A2ASDKClient.sendMessageStream(prompt)
└── extracts: TicketResult (from final_result artifact)