summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-21 07:02:13 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-21 07:02:13 +0800
commite8eebe49407de8947bf509d5cf04d9080ee4edf7 (patch)
treecd7d5b1b2cb2efca2e19786041e49aa4b5e5b72e /README.md
parent13479cd194cd992c67805093e59f8b1dd1b5f3a2 (diff)
downloadsomhairles-dream-fsharp-e8eebe49407de8947bf509d5cf04d9080ee4edf7.tar.gz
Real historical replay: timeline pins load run's own checkpoint GLBs
- 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/<n>-*.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
Diffstat (limited to 'README.md')
-rw-r--r--README.md28
1 files changed, 18 insertions, 10 deletions
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.