Write editor: add save/publish failure telemetry#50176
Conversation
Failed or stalled saves in the Write editor currently leave the Publish and Save buttons disabled with no error surfaced and nothing recorded, so the failures are invisible in Tracks. This adds observability only; it does not change save behavior. - savePost() is now a thin wrapper that reports throws during content preparation / tag resolution (today silent unhandled rejections) as wpcom_write_editor_save_failed with phase "prepare", then re-throws so behavior is unchanged. - The save-request catch fires the same event with phase "save_request". - A non-aborting 30s watchdog fires wpcom_write_editor_save_stalled for a request that never settles (e.g. blocked by a proxy/VPN/ad blocker). Events carry error_code, HTTP error_status, a truncated error_message, and is_autosave / is_update / is_new_post to localize the root cause. RSM-4323 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JzwcxRibRLPqDWqngRx3oh
|
Are you an Automattician? Please test your changes on all WordPress.com environments to help mitigate accidental explosions.
Interested in more tips and information?
|
|
Thank you for your PR! When contributing to Jetpack, we have a few suggestions that can help us test and review your patch:
This comment will be updated as you work on your PR and make changes. If you think that some of those checks are not needed for your PR, please explain why you think so. Thanks for cooperation 🤖 Follow this PR Review Process:
If you have questions about anything, reach out in #jetpack-developers for guidance! |
Code Coverage SummaryCoverage changed in 1 file.
Full summary · PHP report · JS report Coverage check overridden by
I don't care about code coverage for this PR
|
Proposed changes
Failed or stalled saves in the Write editor currently leave the Publish and Save buttons disabled with no error surfaced to the user and nothing recorded in Tracks, so the failures are invisible. This adds observability only — it does not change save behavior.
savePost()is now a thin wrapper that reports throws during content preparation / tag resolution (today silent unhandled rejections) aswpcom_write_editor_save_failedwithphase: "prepare", then re-throws so behavior is unchanged.catchfires the same event withphase: "save_request".wpcom_write_editor_save_stalledfor a request that never settles (e.g. one held open by a proxy, VPN, or ad blocker).error_code, HTTPerror_status, a truncatederror_message, andis_autosave/is_update/is_new_postto localize the root cause.The behavioral fix (reset the saving flag on failure, add a request timeout, surface an error) is intentionally deferred to a follow-up so we can first confirm the actual failure mode from this data.
Related product discussion/links
Does this pull request change what data or activity we track or use?
Yes — it adds two new Tracks events for Write editor save diagnostics:
wpcom_write_editor_save_failed— props:post_status,is_autosave,is_update,is_new_post,phase,error_code,error_status,error_message(truncated to 200 chars).wpcom_write_editor_save_stalled— props:post_status,is_autosave,is_update,is_new_post,elapsed_ms.No post content or personally identifying information is recorded. The
[Status] Needs Privacy Updateslabel should be applied.Testing instructions
wp-admin/admin.php?page=write), add a title and some body content.window.wp.apiFetch = () => Promise.reject( { code: 'rest_cannot_create', message: 'Simulated', data: { status: 503 } } );window._tkq = [];, then click Publish.window._tkqcontains awpcom_write_editor_save_failedentry withphase: "save_request",error_code: "rest_cannot_create",error_status: 503. The existing error message and button re-enable behavior should be unchanged.#tagline to the content and setwindow.wp.apiFetch = () => { throw new TypeError('boom'); };— the event should fire withphase: "prepare".