8dc4eaa384
Universal: PR Check / Wiki Update Reminder (pull_request) Has been skipped
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Universal: PR Check / Require Docs Update (pull_request) Has been skipped
Universal: PR Check / Secret Scan (pull_request) Successful in 10s
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Successful in 1s
Generic: Project CI / Lint & Validate (pull_request) Successful in 15s
Universal: PR Check / Validate PR (pull_request) Failing after 12s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 48s
Generic: Project CI / Tests (pull_request) Has been cancelled
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
The server-side onExtensionBeforeUpdate backup runs synchronously and cannot drive a browser modal, so nothing ever 'popped'. Add a client notice + on-demand live-progress modal on com_joomlaupdate and com_installer(view=update): - plg_system_mokosuitebackup gains onBeforeCompileHead, which injects a 'back up before you update' notice + Back up now button on the update pages (gated by show_update_notice + backup_before_update), plus a new media JS asset that runs the same stepped backup as the dashboard (ajax.init then a loop of ajax.step) with a dependency-free progress overlay. - New AjaxController::preupdateAck() arms the same 10-min throttle key runPreActionBackup() checks, so proceeding with Joomla's update after a modal backup does not run a duplicate server-side backup. - Plugin manifest registers the new media/js folder; language keys added. Phase-1 baseline (notice + on-demand). Auto-intercepting the Update button is the planned phase-2 follow-up (#196). Refs #196 Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i