From e8eebe49407de8947bf509d5cf04d9080ee4edf7 Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Mon, 21 Sep 2026 07:02:13 +0800 Subject: Real historical replay: timeline pins load run's own checkpoint GLBs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - renderTimeline rebuilds #timeline-track after each snapshot and wires click-to-pin on completed checkpoints (kept placeholder nodes otherwise) - selection loads the pinned run's own steps/-*.glb (generation/ ownership guards apply), pins survive live snapshots, 跟随最新 restores live scope, replay pauses/scrubs through 已完成 versions - placeholder fallback now clearly labeled (占位…) only before any run - acceptance: historical_replay_regression (9 checks) pins mid-run, asserts no auto-follow strays, late-older-response precedence, served checkpoint sha256 vs CLI reference, and viewport geometry change - fix: timeline-track id missing in index.html crashed renderTimeline (null firstChild), leaving static placeholder nodes non-clickable - driver: 71/71 checks, zero console/page errors --- README.md | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index 470dc8b..977c984 100644 --- a/README.md +++ b/README.md @@ -188,7 +188,7 @@ 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), 61/61 checks green on desktop and +- Browser acceptance driver (see above), 71/71 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, @@ -196,16 +196,24 @@ dotnet run --project src/SomhairlesDream.Cli -- run \ 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, 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 + 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. A historical + replay regression pins a real checkpoint mid-run by clicking its + timeline node (the request carries the run's own projectId/runId/path), + keeps the pin through later live snapshots (no auto-follow reloads), + returns to live scope via 跟随最新 with the newest checkpoint, ignores a + late older historical response after a newer selection, and asserts + both the served checkpoint identity (sha256 equals the CLI reference + GLB) and that selecting a different version changes the actual viewport + geometry (THREE.Box3 rel diff ≥ 0.05). 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. - NOT verified: production deployment of the old site remains untouched; - `--render` PNG renders; replay button flow against a historical run. + `--render` PNG renders. -- cgit v1.2.3