Fix stepper SSR/hydration flash: server reads cookie, cache bypass
Three changes to eliminate the stepper flash: 1. home-stepper.sx: server path reads cookie via (get-cookie) for step-idx initial value. Client path reads document.cookie via def-store. Both default to 0 when no cookie exists. 2. sx_server.ml: bypass response cache when sx-home-stepper cookie is present. Render on main thread (not worker) so get-cookie sees the parsed request cookies. 3. site-full.spec.js: flash detection test sets cookie=7 via Playwright context, checks SSR HTML matches hydrated state. Test: "No flash: SSR=7 hydrated=7 (cookie=7)" — passes. Tested on fresh stack=site server subprocess. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -18,7 +18,15 @@
|
||||
((val (when (and (string? raw) (contains? raw prefix)) (let ((start (+ (index-of raw prefix) (len prefix)))) (let ((rest (slice raw start)) (end-pos (index-of (slice raw start) ";"))) (if (> end-pos -1) (slice rest 0 end-pos) rest))))))
|
||||
(let ((n (if val (parse-number val) 0))) {:step-idx (signal (if (and (number? n) (>= n 0) (<= n 16)) n 0))})))))
|
||||
nil))
|
||||
(step-idx (if store (get store "step-idx") (signal 0)))
|
||||
(step-idx
|
||||
(if
|
||||
store
|
||||
(get store "step-idx")
|
||||
(let
|
||||
((cv (get-cookie "sx-home-stepper")))
|
||||
(let
|
||||
((n (if cv (parse-number cv) 0)))
|
||||
(signal (if (and (number? n) (>= n 0) (<= n 16)) n 0))))))
|
||||
(dom-stack-sig (signal (list)))
|
||||
(code-tokens (signal (list))))
|
||||
(letrec
|
||||
|
||||
Reference in New Issue
Block a user