Skip to content

[feat] roadmap 13 batch I - UI follow-up fixes (I1-I5) - #33

Merged
AlexZ005 merged 7 commits into
mainfrom
feature/roadmap-13-ui-fixes
Jul 23, 2026
Merged

[feat] roadmap 13 batch I - UI follow-up fixes (I1-I5)#33
AlexZ005 merged 7 commits into
mainfrom
feature/roadmap-13-ui-fixes

Conversation

@AlexZ005

@AlexZ005 AlexZ005 commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

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

  • I1: AiHudButton reuses the exact MobileAddButton classes (bg-gray-700/hover:bg-gray-600) — matches the "+" in every theme (was white).
  • I2: the "+" moves to bottom-16 so the left stack mirrors the right (AI/chat bottom-4, "+"/mic bottom-16). Fixes the 6px gap under the 8-bit theme's borders.
  • I3: the AI button always renders. Unconfigured → clicking opens Settings ▸ AI with the toast (toggleAiPrompt branch); configured → toggles the chat window.

I4 — far-zoom "circle" (two distinct artifacts)

  • I4a (grid fade): the B1 infinite-grid fade eased at 0.2/frame, so the circular fade boundary trailed the camera and swept for ~0.6s after every move. Grid.svelte now derives the zoom from orbit distance-to-target and snaps each frame (no lag, no wobble).
  • I4b (shadow-catcher disc): the dark disc the user still saw is a second artifact — a toggle matrix showed it needs both N8AO and the shadow-catcher disc. N8AO was painting ambient occlusion across the flat scene-span ShadowMaterial disc. Fix: depthWrite:false on 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. New peerServerStatus store updated by peerHandler. Fork resolved: dot + short label (user choice).

Also (org / open-core cleanup)

  • The logo-menu Docs link now opens docs.theprototype.app (was the GitHub wiki).
  • Settings ▸ About links point at the theprototype-app org: Source Code → core, plus new Modules (modules) and Docs (docs) rows.
  • The first-run "alpha release" toast is replaced by a store-driven banner (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 via appNotice.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 build green · svelte-check 499/77 (under baseline).

🤖 Generated with Claude Code

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>
AlexZ005 and others added 5 commits July 23, 2026 06:51
…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
AlexZ005 force-pushed the feature/roadmap-13-ui-fixes branch from 753c287 to d80f243 Compare July 23, 2026 03:53
AlexZ005 and others added 2 commits July 23, 2026 07:06
…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>
@AlexZ005
AlexZ005 merged commit 7b6fe37 into main Jul 23, 2026
@AlexZ005
AlexZ005 deleted the feature/roadmap-13-ui-fixes branch August 5, 2026 20:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant