Skip to content

Unified support: retire the Ask the HE entry and accept any file type in a reply - #26109

Open
adalpari wants to merge 5 commits into
trunkfrom
adalpari/unified-support-reply-attachments
Open

adalpari wants to merge 5 commits into
trunkfrom
adalpari/unified-support-reply-attachments

Conversation

@adalpari

@adalpari adalpari commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

TL;RD

This PR is:

  1. Removing the "Ask the Happiness Engineers" entry in the new support flow.
  2. Supporting general files when attaching them into a ticket in the new support flow.

Description

Two follow-ups to the unified support work, now that replying to a ticket is wired up (#26097).

Remove the "Ask the Happiness Engineers" entry

"Get help" now covers both chatting with the AI Assistant and replying to a ticket, so the old email-only entry isn't needed. #26063 removed the "Ask the Bots" entry and noted that this one would stay "until replying to a ticket works in the new flow" — it does now.

This deletes the screens it reached (the conversation list, the conversation and reply views, the new ticket form, the screenshot picker, the attachment list) along with their models, the SupportConversationDataProvider and SupportFormDataProvider protocols, the ticket tracking actions, and the wordpress-rs mappings behind them. The application log picker and the video player move out of that directory, since the new flow uses both.

The AI Assistant chat loses its "Open a Support Ticket" button, which pushed the deleted form.

Attach documents and other files to a reply

The reply form could only reach the photo library, so a crash report, an exported log or a PDF had no way in. Videos already worked; documents didn't. Photos and videos still come from the photo library, and a second button opens the file browser for everything else. Both feed the same list and the same 20 MB budget.

  • A browsed file is read through its security scope and through an NSFileCoordinator, so a document in iCloud Drive that isn't on the device yet gets fetched instead of failing. The copy runs off the main actor — one the size of a video would otherwise freeze the form.
  • The browser is opened for data rather than item, which leaves out the one thing there's no sending: a folder.
  • Whether to re-encode a file is now read off the file itself rather than passed in, so a PNG browsed from Files is scaled down like one from the photo library. That also leaves animated images alone, which were being flattened to their first frame — usually the very thing the user attached them to show.
  • Documents QuickLook can't draw now show their name instead of an anonymous icon, and backing out of the file browser no longer reports a failure.

Nothing changed on the upload side: the data provider already just passes file paths to wordpress-rs.

Testing instructions

All of this is behind the New Support experimental feature flag (Me → App Settings → Experimental Features), and the attachment work is Jetpack-only, since "Get help" is gated to the Jetpack brand.

  1. Enable New Support, then open Me → Help & Support.
  2. Confirm the only rows are Help Center, Get help, and the two under Diagnostics — "Ask the Happiness Engineers" is gone.
  3. Open an escalated conversation
  4. Under Attachments, check both buttons:
    • Photo Library
    • Browse Files

Checks

  • xcodebuild -scheme Support and -scheme WordPress both build.
  • SupportTests passes (108 tests), including new cases for non-image passthrough across mov/pdf/txt/zip/log, animated GIFs keeping their frames, security-scoped stores, and the new cancellation case.
  • rake lint clean on Modules/Sources/Support, Modules/Tests/SupportTests and WordPress/Classes/ViewRelated/NewSupport.

🤖 Generated with Claude Code

Get help now covers both chatting with the AI Assistant and replying to a
ticket, so the old email-only entry isn't needed.

This deletes the screens it reached — the conversation list, the conversation
and reply views, the new ticket form, the screenshot picker and the attachment
list — along with their models, the SupportConversationDataProvider and
SupportFormDataProvider protocols, the ticket tracking actions, and the
wordpress-rs mappings behind them.

The application log picker and the video player move out of that directory,
since the new flow uses both. The AI Assistant chat loses its "Open a Support
Ticket" button, which pushed the deleted form.
The reply form could only reach the photo library, so a crash report, an
exported log or a PDF had no way in. Photos and videos still come from the
photo library; a second button opens the file browser for everything else,
and both end up in the same list and the same size budget.

A browsed file is read through its security scope and through a file
coordinator, so a document that lives in iCloud Drive and isn't on the device
yet gets fetched instead of failing. The copy runs off the main actor: one the
size of a video would otherwise freeze the form. The browser is opened for
`data` rather than `item`, which leaves out the one thing there's no sending —
a folder.

Whether to re-encode a file is now read off the file itself instead of being
passed in by the caller, so a PNG browsed from Files is scaled down like one
from the photo library. That also leaves animated images alone, which were
being flattened to their first frame — usually the very thing the user
attached them to show.

Documents QuickLook can't draw now show their name rather than an anonymous
icon, and backing out of the file browser no longer reports a failure.
@dangermattic

dangermattic commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator
3 Warnings
⚠️ View files have been modified, but no screenshot or video is included in the pull request. Consider adding some for clarity.
⚠️ This PR is larger than 500 lines of changes. Please consider splitting it into smaller PRs for easier and faster reviews.
⚠️ PR is not assigned to a milestone.

Generated by 🚫 Danger

@wpmobilebot

wpmobilebot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor
App Icon📲 You can test the changes from this Pull Request in WordPress by scanning the QR code below to install the corresponding build.
App NameWordPress
ConfigurationRelease-Alpha
Build Number34811
VersionPR #26109
Bundle IDorg.wordpress.alpha
Commit72d8b12
Installation URL2ghcueslnp0c8
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

@wpmobilebot

wpmobilebot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor
App Icon📲 You can test the changes from this Pull Request in Jetpack by scanning the QR code below to install the corresponding build.
App NameJetpack
ConfigurationRelease-Alpha
Build Number34811
VersionPR #26109
Bundle IDcom.jetpack.alpha
Commit72d8b12
Installation URL10s9o2gg1lpd8
Automatticians: You can use our internal self-serve MC tool to give yourself access to those builds if needed.

…worse

Every still image was re-encoded to a scaled down JPEG on the way in, which
is the right trade for a camera photo and the wrong one for a screenshot: a
screenshot is already a fraction of a photo's size, and JPEG gives back more
than it takes on flat colour and crisp text. The re-encode is now only kept
when it came back smaller, so a screenshot is sent as it was taken — both
smaller and sharper than the copy that was replacing it.

The rejected copy is removed before the original is copied, since an image
already named `.jpeg` was re-encoded to the very path the copy is about to
need and would otherwise sit in the directory unused.

Leaving the reply form now also stops a browsed file still waiting on iCloud.
The copy runs on a detached task, which inherits no cancellation of its own,
and awaiting one isn't a cancellation point either, so the file coordinator
is held outside the task and cancelled from a cancellation handler. That only
helps before the read is granted, which is exactly the case worth stopping:
an iCloud Drive document being fetched in full for a reply the user has
already thrown away. The files queued behind it have nowhere to go either, so
they're left uncopied rather than copied and thrown away one by one.
Removing the Ask the Happiness Engineers entry left "How can we help?" with
documentation alone in the WordPress app, since Get help is gated to the
Jetpack brand. The community forums take its place — the same ones the
support screen this one replaces sends people to.

The row stands in wherever Get help doesn't appear, which is a user we have
no WP.com identity for as much as a brand without the flow. A Jetpack user
signed in only to a self-hosted site, or one whose identity failed to load,
would otherwise be left with the Help Center and no way to reach a person.
Pairing the two as one if/else keeps that structural: exactly one of them
always renders.
@adalpari
adalpari marked this pull request as ready for review October 1, 2026 15:26
@adalpari
adalpari requested a review from crazytonyli October 1, 2026 15:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants