Fix streaming resolve: color dict keys + defer resolveSuspense until after boot

stream-colors dict had green/blue keys but data used emerald/violet — all three
slots now render with correct Tailwind color classes. Platform: resolveSuspense
must not exist on Sx until boot completes, otherwise bootstrap __sxResolve calls
it before web stack loads and resolves silently fail. Moved to post-boot setup
so all pre-boot resolves queue in __sxPending and drain correctly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-12 09:58:18 +00:00
parent 6e27442d57
commit 56855eee7f
3 changed files with 131 additions and 93 deletions

View File

@@ -8,16 +8,57 @@
;; at 1s, 3s, and 5s. Each chunk resolves a different ~shared:pages/suspense slot.
;; Color map for stream chunk styling (all string keys for get compatibility)
(define stream-colors
{"green" {"border" "border-green-200" "bg" "bg-green-50" "title" "text-green-900"
"text" "text-green-800" "sub" "text-green-700" "code" "bg-green-100"
"dot" "bg-green-400"}
"blue" {"border" "border-blue-200" "bg" "bg-blue-50" "title" "text-blue-900"
"text" "text-blue-800" "sub" "text-blue-700" "code" "bg-blue-100"
"dot" "bg-blue-400"}
"amber" {"border" "border-amber-200" "bg" "bg-amber-50" "title" "text-amber-900"
"text" "text-amber-800" "sub" "text-amber-700" "code" "bg-amber-100"
"dot" "bg-amber-400"}})
(define
stream-colors
(dict
"emerald"
(dict
"border"
"border-emerald-200"
"bg"
"bg-emerald-50"
"dot"
"bg-emerald-400"
"title"
"text-emerald-900"
"text"
"text-emerald-800"
"sub"
"text-emerald-700"
"code"
"bg-emerald-100")
"amber"
(dict
"border"
"border-amber-200"
"bg"
"bg-amber-50"
"dot"
"bg-amber-400"
"title"
"text-amber-900"
"text"
"text-amber-800"
"sub"
"text-amber-700"
"code"
"bg-amber-100")
"violet"
(dict
"border"
"border-violet-200"
"bg"
"bg-violet-50"
"dot"
"bg-violet-400"
"title"
"text-violet-900"
"text"
"text-violet-800"
"sub"
"text-violet-700"
"code"
"bg-violet-100")))
;; Generic streamed content chunk — rendered once per yield from the
;; async generator. The :content expression receives different bindings