• Added TicketStatus::NoResponse case (red badge, included in openStatuses) for tickets whose customer posted the latest reply and the agent hasn't responded since
    • Added setting helpdesk_no_response_days (default 90, validated to be >= configured Response Time converted to days)
    • Added 'Apply now' button on the HelpDesk Settings > Display & Behavior tab that runs the No-Response sweep on demand (AJAX)
    • Added artisan command helpdesk:apply-no-response (--days, --dry-run); scheduled daily at 02:45 with withoutOverlapping + runInBackground + onOneServer when the delay setting is > 0
    • Added soft-delete (deleted_at) to helpdesk_tickets so deletes go to a trash bin instead of being permanent
    • Added inline AJAX delete button per row on the admin ticket list pages
    • Added bulk-delete bar (checkbox column + select-all) on admin ticket list pages
    • Added 'Delete older than…' dropdown with periods 1 month, 3 months, 6 months, 1 year, 2 years, 3 years, 4 years and 5+ years (AJAX with loading indicator)
    • Added Trash page (/admin/helpdesk/tickets/trash) with single/bulk Restore, single/bulk Force-Delete and Empty Trash actions
    • Added media cleanup on force-delete: ticket-level attachments and reply attachments are removed from disk via MediaService before the row is hard-deleted
    • Added new admin sidebar entry 'No Response' under HelpDesk > Tickets, and a new dedicated route /admin/helpdesk/tickets/no-response
    • Updated mergeTicket() to forceDelete() the source ticket so a merge does not leave a soft-deleted ghost in the trash
    • Updated HasTrash trait to return JSON for restore/forceDelete/emptyTrash when the request expects it (full AJAX flow)
    • Renamed setting helpdesk_auto_close_days to helpdesk_auto_close_resolved_days for clarity (label: 'Auto-Close resolved tickets After (Days)')
    • Added setting helpdesk_auto_close_no_response_days: closes open tickets when the author has not replied to the last agent message for N days; posts the '/auto-close' canned reply first, triggering the new-reply notification
    • Added setting helpdesk_followup_no_response_days: posts the '/followup' canned reply as a reminder N days after the last agent message; validation enforces it to be strictly less than the no-response auto-close delay
    • Added artisan command helpdesk:auto-close (daily at 02:15) handling both resolved and no-response closures
    • Added artisan command helpdesk:send-followups (daily at 02:30) handling the follow-up reminder
    • Added CannedMessageResolver that reads canned response bodies by shortcut ('/auto-close', '/followup') and falls back to translation keys so the commands keep working if the canned responses are deleted
    • Added Email ↔ Ticket Bridge feature with master toggle on HelpDesk Settings page
    • Added embedded-reply-body option so notification emails carry the agent's reply inline (no click required to read)
    • Added RFC 5322 threading headers (Message-ID, In-Reply-To, References) on outbound replies so customer mail clients thread them correctly
    • Added four-layer inbound correlation cascade: In-Reply-To / References → plus-addressing → subject token → HD-xxxx regex fallback
    • Added configurable correlation strategy (header, plus_addressing, subject_tag) controlling which hints outbound mails emit
    • Added IMAP / POP3 mailbox polling via webklex/laravel-imap with separate credentials from the outbound sender
    • Added 'Test connection' button on the settings page to validate IMAP credentials without saving
    • Added helpdesk:fetch-inbound Artisan command registered under the schedule (cron built from the poll interval setting, withoutOverlapping + onOneServer)
    • Added unknown-sender autoresponder that replies once per hour per sender with the ticket-creation link when no ticket match is found (never auto-creates tickets from email)
    • Added abuse hardening: RFC auto-reply detection, own-email loop guard, sha256 raw-hash dedupe, per-sender hourly rate limit, attachment size/count caps
    • Added email_subject_token to helpdesk_tickets and message_id / in_reply_to / email_references / inbound_raw_hash / source columns to helpdesk_replies
    • Added customer_last_read_at timestamp column to helpdesk_tickets table
    • Added POST support/tickets/{reference}/read endpoint: marks a ticket as read by the customer 3 seconds after the front-end ticket view loads
    • Added read receipt icon (bi-check2-all) under the last agent message on the admin ticket detail page (both chat and list view modes)
    • Added polling on the admin ticket detail page to refresh the read status without a page reload (interval configurable in settings)
    • Added read receipt icon next to ticket subject on admin ticket list pages (active, open, resolved, closed, dashboard) when the customer has read the agent's last message
    • Added Read Receipt Polling Interval setting to HelpDesk Settings page (0 = disabled, default 15 seconds)
    • Renamed the add-on from HelpCenter to HelpDesk
    • Renamed database tables: helpcenter_* → helpdesk_*
    • Renamed settings group and keys: helpcenter → helpdesk
    • Migrated permissions: helpcenter.* → helpdesk.* (including role assignments)
    • Updated addons registry row name and display name
    • Updated menu items route names (helpcenter.* / admin.helpcenter.* → helpdesk.* / admin.helpdesk.*)
    • Cleaned up legacy helpcenter_* entries from the migrations table
    • Changed front-end URL prefix from /help to /support (ticket routes and knowledge base)
    • Added Canned Responses feature for pre-written ticket reply templates
    • Added admin management page with fully AJAX CRUD (create/edit via modals)
    • Added AI Assistant integration on canned response create/edit forms
    • Added canned response picker modal on ticket reply page with AJAX search
    • Added usage tracking to surface most popular responses first
    • Added shortcut codes for quick identification (e.g. /greeting)
    • Added category-based organization with filtering
    • Inserted content is appended to the reply editor (not replacing existing text)
    • Added sidebar menu item under HelpDesk for Canned Responses management