[Whitestone] Fix Timmy OFFLINE Status & GPU Error Handling #811

Closed
opened 2026-03-21 21:52:03 +00:00 by perplexity · 1 comment
Collaborator

Scope

Resolve the critical issue of Timmy showing permanent "OFFLINE" status and implement graceful GPU context loss handling.

Requirements

  • Diagnose and fix why Timmy displays OFFLINE — this is the core value proposition blocker
  • Implement WebGL context loss detection with graceful recovery (not raw error messages)
  • User-friendly error states: "Timmy is taking a quick break — back in a moment" with auto-retry
  • Fallback for devices without WebGL support: 2D interface or text-only mode
  • Handle GPU memory limits: progressive quality reduction before context loss
  • Mobile detection: redirect to appropriate experience instead of broken 3D

Deliverable

Timmy shows ONLINE with functional AI interaction; GPU errors handled gracefully.

Source

Alexander-Whitestone-tower-Timmy-AI-Workshop--Strategic-Transformation-Roadmap.pdf — Sections 1.1.2, 1.1.4

## Scope Resolve the critical issue of Timmy showing permanent "OFFLINE" status and implement graceful GPU context loss handling. ## Requirements - Diagnose and fix why Timmy displays OFFLINE — this is the core value proposition blocker - Implement WebGL context loss detection with graceful recovery (not raw error messages) - User-friendly error states: "Timmy is taking a quick break — back in a moment" with auto-retry - Fallback for devices without WebGL support: 2D interface or text-only mode - Handle GPU memory limits: progressive quality reduction before context loss - Mobile detection: redirect to appropriate experience instead of broken 3D ## Deliverable Timmy shows ONLINE with functional AI interaction; GPU errors handled gracefully. ## Source Alexander-Whitestone-_tower-Timmy-AI-Workshop-_-Strategic-Transformation-Roadmap.pdf — Sections 1.1.2, 1.1.4
claude was assigned by Rockachopa 2026-03-22 23:35:04 +00:00
Collaborator

PR created: #1337

Changes made:

  1. base.html — OFFLINE status bug fixed: connectStatusWs() had catch(e) { return; } which permanently gave up reconnection if the WebSocket constructor threw (e.g. in some network environments). Now retries with exponential backoff like the onclose handler does. Changed label from OFFLINEReconnecting... so it accurately reflects the auto-retry behaviour.

  2. static/world/index.html — WebGL context loss + fallbacks:

    • WebGL support detection before renderer init — shows text-only fallback for unsupported browsers
    • Mobile detection (coarse pointer + < 768px) — shows text fallback instead of broken 3D scene
    • webglcontextlost / webglcontextrestored handlers — shows friendly "Timmy is taking a quick break" overlay, halts animation loop, resumes cleanly on restore
    • Fallback view stays live-synced via the state reader WebSocket
  3. static/world/style.css — new #gpu-error-overlay and #webgl-fallback styles

PR created: #1337 **Changes made:** 1. **`base.html` — OFFLINE status bug fixed**: `connectStatusWs()` had `catch(e) { return; }` which permanently gave up reconnection if the WebSocket constructor threw (e.g. in some network environments). Now retries with exponential backoff like the `onclose` handler does. Changed label from `OFFLINE` → `Reconnecting...` so it accurately reflects the auto-retry behaviour. 2. **`static/world/index.html` — WebGL context loss + fallbacks**: - WebGL support detection before renderer init — shows text-only fallback for unsupported browsers - Mobile detection (coarse pointer + `< 768px`) — shows text fallback instead of broken 3D scene - `webglcontextlost` / `webglcontextrestored` handlers — shows friendly "Timmy is taking a quick break" overlay, halts animation loop, resumes cleanly on restore - Fallback view stays live-synced via the state reader WebSocket 3. **`static/world/style.css`** — new `#gpu-error-overlay` and `#webgl-fallback` styles
Sign in to join this conversation.
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Rockachopa/Timmy-time-dashboard#811