Repository navigation
Review follow-ups: lighter dashboard, Retry-After, faster telemetry writes and statistics, shared nginx config - #519
Merged
Merged
Conversation
… first tap CarDiagram imported the tyre and level history dialogs directly, which put Chart.js (about 190 KB, 67 KB gzipped) on every dashboard visit. Each dialog is now fetched when it is first opened, mounted closed and opened on the next tick so its fade-in and its fetch still start from the change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L6DtW2eHhipteRopmy3cif
Telemetry pushed while the SignalR connection was down never reached the page, which kept showing the old state until the next poll. useSignalR now reports a reconnect (automatic or after its own restart) and App refetches the status. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L6DtW2eHhipteRopmy3cif
An old bookmark or a typo rendered an empty page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L6DtW2eHhipteRopmy3cif
Open Charge Map, Overpass, Nominatim, Valhalla and the RDW each backed off a fixed time after a 429/503/504, whatever the server said. The gate now reads Retry-After (seconds or a date), kept between a second and an hour, and falls back to each client's own default without one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L6DtW2eHhipteRopmy3cif
Each telemetry row kept the full topic that started it,
saic/<account email>/vehicles/<VIN>/..., so every row carried the MG account's
email address. Only the undocumented diagnostic endpoint
GET /api/vehicles/{vin}/topics read it; it goes too. Unmapped topics are still
logged once each. The DropRawTopic migration drops the column, which
PostgreSQL does without rewriting the table.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L6DtW2eHhipteRopmy3cif
Nothing in the app imports it; it is there as a peer of vite-plugin-pwa, which only the build uses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L6DtW2eHhipteRopmy3cif
…tion index The prerequisites named only some of the services GarageStack asks; a table under Security defaults now lists each one, what it receives and how to switch it off. Overpass backing off follows its Retry-After, and the README links every other document, CONTRIBUTING and SECURITY among them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L6DtW2eHhipteRopmy3cif
joszz
enabled auto-merge
October 19, 2026 19:08
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.
Pull Request
Summary
The first two batches (P1 and P2) from a full review of the project.
P1
useSignalRreports a reconnect (automatic, or after its own restart), and App fetches the status again: telemetry pushed while the connection was down never reached the page.Retry-Afterasks (seconds or a date, kept between 1 s and 1 h), falling back to each client's own default without one.TelemetrySnapshot.RawTopicis dropped (DropRawTopicmigration). Every row stored the full topicsaic/<account email>/vehicles/<VIN>/..., so every row carried the MG account's email address. The undocumented diagnostic endpointGET /api/vehicles/{vin}/topics, its only reader, goes with it.workbox-windowmoves todevDependencies: nothing imports it, it is a peer ofvite-plugin-pwa.P2
UPDATEof just the fields the message carried. Checked against a real PostgreSQL: oneUPDATEplus thepg_notifyper message, where there was aSELECTtoo; a row that has gone still takes the patch as a new row.UpstreamRateGate.SendAsyncwaits out the interval, sends, and reads the answer for a slow-down; the five clients no longer repeat those steps by hand.frontend/nginx-app.conf) and only set their own$api_upstream. The build writes a.gzbeside every compressible file at the highest level (scripts/precompress.mjs) andgzip_staticserves it.Measured and left out: precompiling the vue-i18n messages saved under 1 KB gzipped on the entry bundle (the compiled English messages grow the main chunk about as much as the runtime-only build saves), not worth the new build dependency.
For the release notes (Upgrade Notes):
GET /api/vehicles/{vin}/topicsis removed. Dropping the column is instant in PostgreSQL; the space returns gradually, or at once withVACUUM FULL "TelemetrySnapshots";.Type of Change
Related Issues
None.
Checklist
pnpm lint/dotnet build), plusdotnet format --verify-no-changes,has-pending-model-changes, 1432 backend and 1130 frontend testsunraid/garagestack.xmlchanged: not changedAlso checked locally: every migration applies on PostgreSQL 16; both nginx configs pass
nginx -t, and the frontend config, serving the real build, sends the prebuilt.gzbyte for byte withVary, the security headers and the cache headers. The Docker images and the Playwright smoke tests were not built or run locally (no Docker); CI covers them.🤖 Generated with Claude Code
https://claude.ai/code/session_01L6DtW2eHhipteRopmy3cif