E2E health sweep — MessageFlow halo stability, lint, and local web launcher¶
Motivation¶
A large code update (MessageFlow constellation, energy particles, BLAST failure
detail surfacing, auto-warmup toast, CI serialization) landed across backend,
frontend, and dev tooling. A full local-safe validation sweep was run to
confirm overall health and fix anything red.
The sweep surfaced three real defects (one user-visible, two developer-facing).
User-facing change¶
- MessageFlow constellation — running/reducing job nodes are now click-stable.
The breathing halo (
.mf-halo) around an in-flight job previously animatedtransform: scale(1 → 1.35). Because the halo is a child of the interactive.mf-node<g>, the group's bounding box resized on every animation frame, so the job node was never geometrically "stable" — pointer actionability (e.g. Playwright clicks) timed out and the live hit region subtly reflowed. The pulse now animates opacity only (0.08 → 0.32), keeping the halo's geometry fixed. The breathing energy still reads, andprefers-reduced-motionalready fell back to a static opacity, so that path is unchanged.
Developer-facing changes¶
useStickToBottomeslint gate fixed. A recent edit added anisFollowing()call inside auseEffectkeyed only on[enabled], producing areact-hooks/exhaustive-depswarning that failedeslint --max-warnings 0. Fixed by reading the latestisFollowingthrough a ref (isFollowingRef), matching the file's existingrequestScrollRefpattern — no re-subscription, no behaviour change.- Local web launcher no longer hangs on
azd.scripts/dev/local-run.sh webcalledazd env get-valueswithout thetimeout/ `