28-Jun-2026 — raise timeouts, add timing telemetry, fix resize queue alert ref #300
What's new
The default Serenity wait timeout is raised to 90s (from 45s) as defence
in depth against slow page loads on shared CPU. Job timing telemetry is
added so upload reports show where time is being spent instead of relying
on log archaeology. The image resize queue alert now follows the project
convention with an icon and bold title, uses user-friendly messages, and
survives page refresh because the queue state is stored on the backend.
At a glance
- Serenity/JS DEFAULT_WAIT_TIMEOUT doubled to 90s to reduce false
timeouts during CPU-contended navigation.
- Queue wait time is now tracked and logged alongside total execution time.
- Lifecycle events include human-readable elapsed time at each phase:
scenario execution, report generation, S3 upload.
- Result callback payload includes total wall-clock duration.
- Resize queue alert now shows icon + bold title (project convention)
instead of plain text.
- Queue message is user-friendly: "Your image resize has been queued
and will start once the current job finishes."
- Resize queue state persists on the backend across page refresh via
new GET /api/integration-worker/resize/status/:contentMetadataId
endpoint. Frontend queries it on init instead of localStorage.
- The "Resize already queued" toast now reads "Resize in progress"
with a clearer message.
Technical changes
- serenity-timeouts.ts: Duration.ofSeconds(45) -> Duration.ofSeconds(90).
- ramblers-upload-execution.model.ts: IntegrationWorkerQueuedUploadJob
gains enqueuedAt field so queue wait can be measured.
- integration-worker-routes.ts: executeWorkerJob captures enqueuedAt
at enqueue time and logs queueWaitMs on start and finish.
- integration-worker-runner.ts: per-phase elapsed times in lifecycle
events and result payload. Added formatElapsed() helper.
- integration-worker-resize-routes.ts: queue message is now
user-friendly instead of exposing job ID and type.
- image-resize-session-registry.ts: added resizeQueueStates Map,
resizeQueueState/setResizeQueueState/clearResizeQueueState functions
for server-side queue state persistence keyed by content metadata ID.
- integration-worker-resize-callback-routes.ts: emitProgress persists
state to the store, emitResult clears it. Added GET /status/:id
endpoint for the frontend to restore state after page refresh.
- image-resize-dispatcher.ts: clears queue state on dispatch errors.
- image-list-edit.ts: resize alert updated to use faCircleCheck/
faCircleInfo icons with bold title. Removed localStorage persistence.
Added restoreResizeState() that queries the backend on init via
HttpClient. Cleanup calls clear the server-side state.