{"id":"6a41a474be0ce6ff3c1b30a9","title":"2026 06 28 Issue 300 Build 724","path":"how-to/committee/release-notes/2026-06-28-issue-300-build-724","contentMarkdown":"# 28-Jun-2026 — raise timeouts, add timing telemetry, fix resize queue alert [ref #300](https://github.com/nbarrett/ngx-ramblers/issues/300)\n\n## [build 724](https://github.com/nbarrett/ngx-ramblers/actions/runs/28338229804) — [commit edbc68d](https://github.com/nbarrett/ngx-ramblers/commit/edbc68d08e5e40d68e724cacf09ae5f466d87790)\n\n_____\n\n## What's new\n\nThe default Serenity wait timeout is raised to 90s (from 45s) as defence\nin depth against slow page loads on shared CPU. Job timing telemetry is\nadded so upload reports show where time is being spent instead of relying\non log archaeology. The image resize queue alert now follows the project\nconvention with an icon and bold title, uses user-friendly messages, and\nsurvives page refresh because the queue state is stored on the backend.\n\n## At a glance\n\n- Serenity/JS DEFAULT_WAIT_TIMEOUT doubled to 90s to reduce false\ntimeouts during CPU-contended navigation.\n- Queue wait time is now tracked and logged alongside total execution time.\n- Lifecycle events include human-readable elapsed time at each phase:\nscenario execution, report generation, S3 upload.\n- Result callback payload includes total wall-clock duration.\n- Resize queue alert now shows icon + bold title (project convention)\ninstead of plain text.\n- Queue message is user-friendly: \"Your image resize has been queued\nand will start once the current job finishes.\"\n- Resize queue state persists on the backend across page refresh via\nnew GET /api/integration-worker/resize/status/:contentMetadataId\nendpoint. Frontend queries it on init instead of localStorage.\n- The \"Resize already queued\" toast now reads \"Resize in progress\"\nwith a clearer message.\n\n## Technical changes\n\n- serenity-timeouts.ts: Duration.ofSeconds(45) -> Duration.ofSeconds(90).\n- ramblers-upload-execution.model.ts: IntegrationWorkerQueuedUploadJob\ngains enqueuedAt field so queue wait can be measured.\n- integration-worker-routes.ts: executeWorkerJob captures enqueuedAt\nat enqueue time and logs queueWaitMs on start and finish.\n- integration-worker-runner.ts: per-phase elapsed times in lifecycle\nevents and result payload. Added formatElapsed() helper.\n- integration-worker-resize-routes.ts: queue message is now\nuser-friendly instead of exposing job ID and type.\n- image-resize-session-registry.ts: added resizeQueueStates Map,\nresizeQueueState/setResizeQueueState/clearResizeQueueState functions\nfor server-side queue state persistence keyed by content metadata ID.\n- integration-worker-resize-callback-routes.ts: emitProgress persists\nstate to the store, emitResult clears it. Added GET /status/:id\nendpoint for the frontend to restore state after page refresh.\n- image-resize-dispatcher.ts: clears queue state on dispatch errors.\n- image-list-edit.ts: resize alert updated to use faCircleCheck/\nfaCircleInfo icons with bold title. Removed localStorage persistence.\nAdded restoreResizeState() that queries the backend on init via\nHttpClient. Cleanup calls clear the server-side state.","contentHtml":"<h1>28-Jun-2026 — raise timeouts, add timing telemetry, fix resize queue alert <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/300\">ref #300</a></h1>\n<h2><a href=\"https://github.com/nbarrett/ngx-ramblers/actions/runs/28338229804\">build 724</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/commit/edbc68d08e5e40d68e724cacf09ae5f466d87790\">commit edbc68d</a></h2>\n<hr>\n<h2>What&#39;s new</h2>\n<p>The default Serenity wait timeout is raised to 90s (from 45s) as defence\nin depth against slow page loads on shared CPU. Job timing telemetry is\nadded so upload reports show where time is being spent instead of relying\non log archaeology. The image resize queue alert now follows the project\nconvention with an icon and bold title, uses user-friendly messages, and\nsurvives page refresh because the queue state is stored on the backend.</p>\n<h2>At a glance</h2>\n<ul>\n<li>Serenity/JS DEFAULT_WAIT_TIMEOUT doubled to 90s to reduce false\ntimeouts during CPU-contended navigation.</li>\n<li>Queue wait time is now tracked and logged alongside total execution time.</li>\n<li>Lifecycle events include human-readable elapsed time at each phase:\nscenario execution, report generation, S3 upload.</li>\n<li>Result callback payload includes total wall-clock duration.</li>\n<li>Resize queue alert now shows icon + bold title (project convention)\ninstead of plain text.</li>\n<li>Queue message is user-friendly: &quot;Your image resize has been queued\nand will start once the current job finishes.&quot;</li>\n<li>Resize queue state persists on the backend across page refresh via\nnew GET /api/integration-worker/resize/status/:contentMetadataId\nendpoint. Frontend queries it on init instead of localStorage.</li>\n<li>The &quot;Resize already queued&quot; toast now reads &quot;Resize in progress&quot;\nwith a clearer message.</li>\n</ul>\n<h2>Technical changes</h2>\n<ul>\n<li>serenity-timeouts.ts: Duration.ofSeconds(45) -&gt; Duration.ofSeconds(90).</li>\n<li>ramblers-upload-execution.model.ts: IntegrationWorkerQueuedUploadJob\ngains enqueuedAt field so queue wait can be measured.</li>\n<li>integration-worker-routes.ts: executeWorkerJob captures enqueuedAt\nat enqueue time and logs queueWaitMs on start and finish.</li>\n<li>integration-worker-runner.ts: per-phase elapsed times in lifecycle\nevents and result payload. Added formatElapsed() helper.</li>\n<li>integration-worker-resize-routes.ts: queue message is now\nuser-friendly instead of exposing job ID and type.</li>\n<li>image-resize-session-registry.ts: added resizeQueueStates Map,\nresizeQueueState/setResizeQueueState/clearResizeQueueState functions\nfor server-side queue state persistence keyed by content metadata ID.</li>\n<li>integration-worker-resize-callback-routes.ts: emitProgress persists\nstate to the store, emitResult clears it. Added GET /status/:id\nendpoint for the frontend to restore state after page refresh.</li>\n<li>image-resize-dispatcher.ts: clears queue state on dispatch errors.</li>\n<li>image-list-edit.ts: resize alert updated to use faCircleCheck/\nfaCircleInfo icons with bold title. Removed localStorage persistence.\nAdded restoreResizeState() that queries the backend on init via\nHttpClient. Cleanup calls clear the server-side state.</li>\n</ul>\n"}