MotorSignal-App/docs/website-gps-badge-deploymen...

4.1 KiB
Raw Permalink Blame History

GPS badge overlap deployment — 2026-10-04

Result

Deployed website revision c7b00a4bd315c9185a01f4f28630f58c9f130cb2. The replay GPS/source metadata now occupies a normal-flow row below the Leaflet viewport. The telemetry source, map rendering, and controls were not changed.

Changed and committed files:

  • website/components/web-telemetry-replay-modal.tsx
  • website/tests/replay-recorded-data.test.tsx

Commit contains only these two files. The regression asserts the badge is outside the map, visible on the map tab, hidden on the corner tab, and preserves the telemetry source.

Verification

  • Focused replay regression: 5/5 passed in both worktrees.
  • TypeScript check and git diff --check: passed.
  • Fresh production build: passed with production project motoapp-d22e0, no emulator configuration or demo build reuse. Artifact excludes the regression test and local QA harness.
  • Production signed-in replay: actual existing R2 CSV ride loaded; badge showed GPS: 34.04784, -85.23513, source r2-csv, and OpenStreetMap label. At desktop width, Leaflet zoom tiles moved from z10 to z11 on + and returned to z10 on −. DOM geometry showed no overlap with Leaflet controls, no clipping, 11px text, and badge outside the map.
  • At production viewport 390×844, mouse + moved tiles z8→z9 and − returned z9→z8. Badge remained readable with no control overlap, clipping, or horizontal dialog overflow.
  • At 320×740, DOM checks showed the badge wrapped to 55px height, retained all text, and had no overlap/clipping/overflow. The production zoom level sampled asynchronously during viewport resize and animation, so this width's production zoom transition is not counted as verified.
  • Separate sanitized local Playwright browser with actual Leaflet and touch input: desktop1280×900, mobile320×740, mobile390×844, landscape844×390 all passed tap +/tap − (z18→19→18), badge/control separation, readable text, and responsive fit. Tile imagery was stubbed locally; no production session/data was used. This is browser emulation, not physical-device testing.
  • Public smoke: /api/version 200 with the deployed revision; /account 200; guest telemetry request 401.

The authenticated production browser session expired during the final narrow-width checks. A final screenshot showed the replay and badge but the page had returned to its signed-out header. Authenticated checks therefore apply to the observed signed-in period above; no further authenticated check was possible after expiry. No data was changed.

Deployment and rollback

Fresh artifact SHA-256: c4420a7cd782fd117168acaec93a234c2f74cf3d0ee9e2c3c065bb12e78eec1e.

Rollback archive on VPS: /home/motorsignal-admin/rollback-website-b25b6e5-to-c7b00a4-20261004.tar.gz (mode 0600). The previous runtime .next is also retained at /opt/motorsignal/releases/20260920-master-7efd29a/website/.next.rollback-c7b00a4bd315.

As the VPS administrator, run:

python3 /home/motorsignal-admin/deploy-badge-c7b00a4bd315.py rollback

This restores the preceding working replay runtime and scoped source, then restarts only the website.

Evidence

Evidence directory: C:/Users/Bill/Desktop/flutter-app/output/playwright/badge-20261004/.

  • local-touch-results.json, local-mobile-final.png, local-desktop-final.png: isolated responsive/touch results.
  • focused-validation.json, production-config.json, production-build-result.json, production-build.log: regression, configuration, and fresh build.
  • motorsignal-website-c7b00a4bd315.tar.gz, stage-result.json, deployment-result.json: packaged artifact and deployment.
  • public-smoke.json: served revision and public/guest checks.

The production screenshot was inspected in the Codex browser and was not saved into this evidence directory.

Git state and scope

Deployment worktree HEAD is c7b00a4bd315c9185a01f4f28630f58c9f130cb2; it was clean after the scoped commit. The main checkout remains on release/v1.0.2-build102-community-feed at bd278cdfd3619242a3056c6a2738abb0aff70feb, preserving all pre-existing dirty/untracked work. No push, mobile release, backend/rules change, production fixture, or user ride mutation occurred.