From 13479cd194cd992c67805093e59f8b1dd1b5f3a2 Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Mon, 21 Sep 2026 06:05:15 +0800 Subject: feat(viewer): add user retry for failed step loads and regressions for same-run ordering and replay invalidation --- README.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index 09f6d2a..470dc8b 100644 --- a/README.md +++ b/README.md @@ -188,16 +188,22 @@ dotnet run --project src/SomhairlesDream.Cli -- run \ reference run; a failure run (pre-existing run directory) shows status `失败` with the error surfaced in `run-message`; zero console errors on all pages. -- Browser acceptance driver (see above), 53/53 checks green on desktop and +- Browser acceptance driver (see above), 61/61 checks green on desktop and narrow viewports: framing asserted numerically from the projected scene bounding box (not by trusting whole-canvas hashes alone), frozen screenshots byte-deterministic, GLB hash equality, failure surfacing, zero console errors. A stale-load regression intercepts step GLB - responses and fulfills them late, reordered, or with errors across six + responses and fulfills them late, reordered, or with errors across nine runs, asserting via actual scene geometry (`THREE.Object3D` types/colors) and the visible note that superseded runs' responses never repaint the - viewport, same-path reruns still reload, run switches to empty state - fall back to the replay frame, and failed current loads retry. The + viewport, same-path reruns still reload, and run switches to empty state + fall back to the replay frame. It also proves: a failed current + latest-step load (after run completion) shows a visible retry affordance + on the note and a user click re-requests the same owner/path without + SSE reconnect; within one run an older step resolving after the newer + step is ignored; and a live step response still pending after entering + replay never repaints the selected replay frame view. Held responses + are drained and the route handler removed before the page closes. The frontend refits the camera to the loaded model (`THREE.Box3`-based framing) whenever the canvas resizes, and a resize never reverts the viewport to replay placeholder geometry. -- cgit v1.2.3