Conversation
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.
Collaborator
Generated by 🚫 Danger |
Contributor
|
| App Name | WordPress | |
| Configuration | Release-Alpha | |
| Build Number | 34811 | |
| Version | PR #26109 | |
| Bundle ID | org.wordpress.alpha | |
| Commit | 72d8b12 | |
| Installation URL | 2ghcueslnp0c8 |
Contributor
|
| App Name | Jetpack | |
| Configuration | Release-Alpha | |
| Build Number | 34811 | |
| Version | PR #26109 | |
| Bundle ID | com.jetpack.alpha | |
| Commit | 72d8b12 | |
| Installation URL | 10s9o2gg1lpd8 |
…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
marked this pull request as ready for review
October 1, 2026 15:26
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


TL;RD
This PR is:
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
SupportConversationDataProviderandSupportFormDataProviderprotocols, 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.
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.datarather thanitem, which leaves out the one thing there's no sending: a folder.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.Checks
xcodebuild -scheme Supportand-scheme WordPressboth build.SupportTestspasses (108 tests), including new cases for non-image passthrough acrossmov/pdf/txt/zip/log, animated GIFs keeping their frames, security-scoped stores, and the new cancellation case.rake lintclean onModules/Sources/Support,Modules/Tests/SupportTestsandWordPress/Classes/ViewRelated/NewSupport.🤖 Generated with Claude Code