Skip to content

Staging#19

Merged
MichaelWheeley merged 6 commits intoMichaelWheeley:feature/thai-language-devfrom
accius:Staging
Mar 23, 2026
Merged

Staging#19
MichaelWheeley merged 6 commits intoMichaelWheeley:feature/thai-language-devfrom
accius:Staging

Conversation

@MichaelWheeley
Copy link
Copy Markdown
Owner

What does this PR do?

Type of change

  • Bug fix
  • New feature
  • Performance improvement
  • Refactor / code cleanup
  • Documentation
  • Translation
  • Map layer plugin

How to test

Checklist

  • App loads without console errors
  • Tested in Dark, Light, and Retro themes
  • Responsive at different screen sizes (desktop + mobile)
  • If touching server.js: caches have TTLs and size caps (we serve 2,000+ concurrent users)
  • If adding an API route: includes caching and error handling
  • If adding a panel: wired into Modern, Classic, and Dockable layouts
  • No hardcoded colors — uses CSS variables (var(--accent-cyan), etc.)
  • No .bak, .old, console.log debug lines, or test scripts included

Screenshots (if visual change)

accius and others added 6 commits March 23, 2026 16:28
- Wrap each PluginLayer in its own error boundary so a single crashed
  plugin (getPane().appendChild on a dead map) never takes down the
  whole dashboard. Boundary auto-resets on projection switch.
- Add isMapAlive() guard: validates map._container and _panes exist
  before passing to hooks — prevents effects from using destroyed maps.
- PluginLayer key now includes projection (az/merc) so hooks fully
  remount with clean refs when switching map instances.
- useCityLights: fall back to default pane when nightPane doesn't
  exist on the azimuthal map.
- Reject legacy 'azimuthal' mapStyle from localStorage.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Streets: switch from tile.openstreetmap.org (requires Referer, blocks
apps violating tile usage policy) to CARTO Voyager — same OSM data,
no access restrictions.

Terrain: switch from opentopomap.org (similar usage restrictions) to
Esri World Physical Map.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
putImageData() ignores canvas transforms, so on displays with
devicePixelRatio > 1 (Mac Retina, etc.) the tile globe rendered at
1/DPR size in the top-left corner while distance rings and spots
drew correctly.

Fix: paint tile ImageData onto a temporary canvas, then use
drawImage() which respects the active DPR transform.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Plugin layer getPane crash fix
- Streets & Terrain tile provider swap
- Azimuthal Retina/HiDPI tile alignment fix

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Windows batch script: ternary operator precedence bug caused
'--multicast' to be emitted as a standalone command instead of a
Node.js argument. Also fixed mismatched quote (double→single).
Wrapped ternary in parentheses.

rig-listener TCI: added detailed error message for Sec-WebSocket-Accept
hash failures matching the rig-bridge implementation. Helps users
identify SDR apps with non-standard WebSocket implementations.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…HTML

Cloudflare ignores origin Cache-Control for some content types and
caches HTML at the edge. This prevents the visitor middleware from
ever seeing the request, causing visitor counts to drop to near zero.

CDN-Cache-Control: no-store is a Cloudflare-specific header that
explicitly tells the edge to never cache the response, while the
browser still sees the standard Cache-Control headers.

Applied to both express.static HTML responses and the SPA catch-all.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@MichaelWheeley MichaelWheeley merged commit b982b7f into MichaelWheeley:feature/thai-language-dev Mar 23, 2026
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.

2 participants