[feat] roadmap 13 batch I - UI follow-up fixes (I1-I5) - #33
Merged
Conversation
AlexZ005
added a commit
that referenced
this pull request
Jul 22, 2026
…itions, modules repo - CLAUDE.md map rewritten for flow v2: flowGraphs source-of-truth + editor-view mirror (and WHY it lives in the leaf store), flowGraphs.js/objectFlow.js libs, graph-routed nodesHandler, implicit-owner runtime rule, embed inject/harvest, resolvedInputType/replaceableInputEdges socket rules - new gotchas: the history.js TDZ-cycle family (flowRuntime imports must not reach history/shortcuts statically), NodeWrapper flex-ROW slot + padded-box handle anchoring, autosave GLTF restore re-uuid (userData.__uuid stamp), deselect clears only the selectedObjects SET - Module SDK section: registerNodeDefs + pointerRay (drag recipe) + the theprototype-app/modules repo (flow-toolkit, untangle) - status 2026-07-22: PR #36 + #37 merged, 190 untangle shipped as-built, svelte-check baseline now 499/77, remaining H4 + open PRs #33/#34 - e2e skill: npx vite dev (npm eats --port flags), __stores additions (flowGraphs/flowGraphsCtl/objectFlow/pointerRayNow/applyModuleMessage), repo-external module verification recipe (manager zip install) - peer-feature skill: per-object graph replication rules (graphId, allNodes, prune invariants, flowgraph history kind, single-connection inputs) + SDK additions + untangle as the worked game example Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tack parity - I1: AiHudButton drops the white accent and reuses the MobileAddButton classes (bg-gray-700 / hover:bg-gray-600) so the AI "sparkles" button matches the "+" above it in every theme. - I2: move the "+" to bottom-16 so the left corner stack mirrors the right (AI/chat at bottom-4, "+"/mic at bottom-16 = a 4px gap on both sides); the <=600px lifts in ui.css already mirror (74/122). Fixes the 6px gap visible under the 8-bit theme's hard borders. - I3: the AI HUD button now ALWAYS renders. When no provider is configured, clicking opens Settings > AI with the toast (the shortcuts.js toggleAiPrompt unconfigured branch, same as the backquote pill); configured, it toggles the chat window. - ui-polish e2e suite: A2 folded into I1/I2/I3 checks (always-visible, gray styling, bottom offsets, unconfigured-click-opens-Settings, configured- click-opens-window). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diagnosed the "flashing circle" at far zoom while moving the camera: it is the B1 infinite-grid fade, not the shadow-catcher disc. The catcher scale is constant through dolly + orbit; the grid fadeDistance eased toward its target at 0.2/frame, so the circular fade boundary trailed the camera and swept across the grid for ~0.6s after every move (measured: 695 -> 3073 over ~35 frames on a dolly-out, and still drifting during orbit). Fix in Grid.svelte: - derive the zoom proxy from the orbit distance-to-TARGET, not distance to the origin, so a pure orbit no longer changes it (no wobble mid-orbit); - SNAP fadeDistance to the target each frame instead of lerping. A smooth dolly changes the target smoothly, so snapping tracks the camera with no lag and no pop; a discrete camera jump just resizes the ring instantly. After the fix the uniform is at its target on the first sampled frame and holds flat through orbit. ui-polish e2e gains an I4 regression check. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Users could not tell which signaling world they were in (a wrong server means
share links that never connect). Add a compact indicator to the Connect pill:
a colored dot + short label for the RESOLVED server.
- peerServer.js: describePeerServer() mirrors resolvePeerOptions' branch logic
and returns {kind, label, host, port, path} - self-hosted / public cloud /
custom / local dev; new peerServerStatus store holds the live value.
- peerHandler: publishes the resolved server on peer creation and re-publishes
with didFallback=true when the self-hosted server is unreachable and it
switches to the public cloud.
- Connect.svelte: dot (green self-hosted / violet custom / blue public / gray
local / amber fallback) + label; label reads "public (fallback)" on
fallback; full host+path in the title tooltip; the label truncates so the
pill/narrow bar stays one line. Non-interactive (no a11y handlers).
- App.svelte: expose peerServer on the __stores debug hook for the e2e.
- ui-polish e2e gains I5 checks (indicator renders + fallback label/kind flip).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…tcher The "far-zoom circle" reported after the I4 grid-fade fix is a SECOND artifact: a dark filled disc at the scene centre, visible only when dollied far out. Isolated it with a toggle matrix - it needs BOTH N8AO and the shadow-catcher disc (AO-off OR catcher-off => no disc). N8AO was treating the flat scene-span ShadowMaterial disc (just under the grid) as a solid occluder and painting ambient occlusion across it. Fix: set depthWrite:false on the catcher's ShadowMaterial so it stays out of the depth buffer the N8AO post-pass samples. Verified a shadow-casting box still lands a soft contact shadow on the ground, so shadow reception is intact (depthWrite only affects the depth buffer, not the shadow blend). ui-polish e2e asserts the catcher material depthWrite is false. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
….app The logo menu's Docs button opened the GitHub wiki; point it at the docs site (docs.theprototype.app) instead. ui-polish e2e opens the logo menu and asserts the Docs button targets that URL. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
AlexZ005
force-pushed
the
feature/roadmap-13-ui-fixes
branch
from
July 23, 2026 03:53
753c287 to
d80f243
Compare
…type-app org - Source Code now links to github.com/theprototype-app/core (was the old AlexZ005/theprototype.app repo). - Add Modules (github.com/theprototype-app/modules) and Docs (github.com/theprototype-app/docs) rows; regroup the row rounding. - Version + Dev Builds rows unchanged (Dev Builds left as-is per the user). - ui-polish e2e opens Settings > About and asserts the three org links. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the hardcoded "This is an alpha release" first-run toast with a
store-driven banner. New `appNotice` writable in appStore holds
{ text, ctaLabel?, ctaUrl? } | null; the OSS default reads "You are running the
local, open-source version of theprototype." with a Source link to the core repo.
This is the open-core seam for roadmap #13 batch M: the cloud plugin loaded via
VITE_CLOUD_PLUGIN can rebrand the banner or remove it entirely with
appNotice.set(null) - the OSS build never has to know about the cloud. Still
one-shot via the hasSeenDisclaimer flag; recolored from red to the neutral
blue-bordered info style.
ui-polish e2e drives the banner: shows the appNotice text, confirms the old
alpha copy is gone, and that appNotice.set(null) removes it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Roadmap #13 Batch I — UI follow-up fixes (from user testing 2026-07-21/23). Rebased on the flow-v2 merge.
I1/I2/I3 — AI HUD button + left corner stack
AiHudButtonreuses the exactMobileAddButtonclasses (bg-gray-700/hover:bg-gray-600) — matches the "+" in every theme (was white).bottom-16so the left stack mirrors the right (AI/chatbottom-4, "+"/micbottom-16). Fixes the 6px gap under the 8-bit theme's borders.toggleAiPromptbranch); configured → toggles the chat window.I4 — far-zoom "circle" (two distinct artifacts)
Grid.sveltenow derives the zoom from orbit distance-to-target and snaps each frame (no lag, no wobble).depthWrite:falseon the catcher keeps it out of the depth buffer N8AO samples; verified a box still casts a soft contact shadow, so shadow reception is intact.I5 — Connect shows the active peer server
Compact dot + short label for the resolved signaling server (self-hosted / public cloud / custom / local dev), including the
didFallback→ "public (fallback)" (amber) state. Full host+path in the tooltip; label truncates to keep the pill/narrow bar one line. NewpeerServerStatusstore updated bypeerHandler. Fork resolved: dot + short label (user choice).Also (org / open-core cleanup)
docs.theprototype.app(was the GitHub wiki).theprototype-apporg: Source Code →core, plus new Modules (modules) and Docs (docs) rows.appNotice). OSS default: "You are running the local, open-source version of theprototype." with a Source link. This is the open-core seam for batch M — the cloud plugin (VITE_CLOUD_PLUGIN) can rebrand it or remove it viaappNotice.set(null), and the OSS build never has to know about the cloud.Verification
tests/e2e/roadmap-13-ui-polish.test.cjs— all checks PASS (A2 folded into I1/I2/I3; I4 grid + I4 disc + I5 + Docs + About-links + appNotice banner).npm run buildgreen ·svelte-check499/77 (under baseline).🤖 Generated with Claude Code