Release: dev → main — pre-update backup hardening + config lang fix #303

Merged
jmiller merged 10 commits from dev into main 2026-07-17 00:32:57 +00:00
Owner

Release merge carrying:

  • fix(preupdate): server-authoritative pre-action skip flag — arms the one-shot skip flag in AjaxController::step on genuine backup completion (keyed by msb_action), so a failed client ajax.preupdateAck POST can no longer cause a second backup behind the "update is running" overlay.
  • fix(preupdate): time-bound the skip flag — the flag now stores its arm time and is honoured only within a 300s TTL (consumed one-shot), so an abandoned backup flow can't leave a stale flag that silently skips a later real pre-action backup. Fail-safe both directions.
  • fix(lang): Options page shows raw COM_MOKOSUITEBACKUP_CONFIGURATION — added the element-derived COM_MOKOSUITEBACKUP / COM_MOKOSUITEBACKUP_CONFIGURATION keys to all four language files so com_config resolves the Options-page title. (#234)

Manifests at 02.66.05. Triggers the Build & Release Pipeline to cut the stable release.

https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i

Release merge carrying: - **fix(preupdate): server-authoritative pre-action skip flag** — arms the one-shot skip flag in `AjaxController::step` on genuine backup completion (keyed by `msb_action`), so a failed client `ajax.preupdateAck` POST can no longer cause a **second** backup behind the "update is running" overlay. - **fix(preupdate): time-bound the skip flag** — the flag now stores its arm time and is honoured only within a 300s TTL (consumed one-shot), so an abandoned backup flow can't leave a stale flag that silently **skips** a later real pre-action backup. Fail-safe both directions. - **fix(lang): Options page shows raw `COM_MOKOSUITEBACKUP_CONFIGURATION`** — added the element-derived `COM_MOKOSUITEBACKUP` / `COM_MOKOSUITEBACKUP_CONFIGURATION` keys to all four language files so `com_config` resolves the Options-page title. (#234) Manifests at 02.66.05. Triggers the Build & Release Pipeline to cut the stable release. https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i
jmiller added 10 commits 2026-07-17 00:31:46 +00:00
fix(preupdate): arm pre-action skip flag server-side to stop double backup
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 32s
dabc556e18
The one-shot flag that tells plg_system_mokosuitebackup to skip its synchronous
pre-update/pre-uninstall backup was set only by the client-side ajax.preupdateAck
POST, whose failure the runbackup screen swallows in a catch(). If that POST
failed, the re-fired extension update ran a SECOND backup behind the black
"update is running" overlay — the "backup runs twice" symptom.

Arm the skip flag server-side in AjaxController::step the moment a backup that
was launched as a pre-update/pre-uninstall front completes (keyed by the
msb_action the runbackup screen now passes on each step). This is authoritative
and independent of the fragile ack POST, which is kept as a redundant fallback.

Failure-safe by design: the flag is armed ONLY on genuine completion (done, no
error), so a failed or cancelled backup never arms it — a real update is never
left un-backed-up. Worst case is one redundant backup, never a missing one.

Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i
Merge branch 'fix/preupdate-double-backup' into dev
Universal: Auto Version Bump / Version Bump (push) Successful in 13s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 28s
3efadf941f
fix(preupdate): arm pre-action skip flag server-side to stop double backup

Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i
fix(preupdate): time-bound the pre-action skip flag
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Failing after 7s
462aed0e51
The one-shot "client already backed up" skip flag was a bare boolean with no
expiry. If a user ran the full-screen pre-update backup then abandoned the flow
(closed the tab before the re-fired update fired), the flag lingered for the
whole session and could suppress a LATER, unrelated pre-action backup — a real
update running with no backup.

Store the unix time the flag was armed (AjaxController::armPreactionSkip) and
honour the skip only within PREACTION_SKIP_TTL (300s), consuming it one-shot.
A stale flag is now ignored and the server backs up as normal.

Completes the pre-update double-backup hardening: server-side arming stops the
"ack fails -> double backup" direction; the TTL stops the "abandoned flow ->
skipped backup" direction. Fail-safe both ways.

Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i
Merge branch 'fix/preaction-skip-ttl' into dev
Universal: Auto Version Bump / Version Bump (push) Successful in 11s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 30s
c01b0ab112
fix(preupdate): time-bound the pre-action skip flag

Claude-Session: https://claude.ai/code/session_01WbGBN9VyRK61zczYWcCQ2i
chore(version): pre-release bump to 02.66.07-dev [skip ci]
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Successful in 34s
Branch Cleanup / Delete merged branch (pull_request) Has been cancelled
RC Revert / Rename rc/ back to dev/ (pull_request) Has been cancelled
d7639ec3d9
jmiller merged commit 605e45a967 into main 2026-07-17 00:32:57 +00:00
Sign in to join this conversation.