Skip to content

feat(version): add build metadata, update detection banner, and What's New dialog - #188

Draft
wgordon17 wants to merge 11 commits into
gordon-code:mainfrom
wgordon17:feat/site-modernization-pr7
Draft

wgordon17 wants to merge 11 commits into
gordon-code:mainfrom
wgordon17:feat/site-modernization-pr7

Conversation

@wgordon17

Copy link
Copy Markdown
Member

Summary

  • Stamp client builds with package version, git SHA, and build time via a Vite build-metadata plugin, emit an uncached /version.json endpoint, tag Sentry releases, and surface the active build version in Settings and the dashboard footer
  • Poll /version.json for new deployments, display a non-intrusive bottom update banner, flush debounced settings/view state before reloading on the next route navigation, and guard against stale-chunk preload errors
  • Generate a build-time virtual changelog from CHANGELOG.md and add a text-only What's New dialog with an unread indicator dot in the header and Settings

- Keep Suspense fallback active when a prevented vite:preloadError resolves a lazy route import to undefined
- Guard pre-reload config and view flushes against overwriting other tabs' saved state when the current tab is clean, and move initConfigPersistence cleanup to the outer owner
- Clear updateAvailable and dismiss the app-update notification when version.json reports the running build again, deduplicate shared build/changelog constants and repo links, and expand unit and E2E coverage
Persist config and view state through a shared per-key factory: each tab
writes only the keys it changed on top of the validated stored blob, and
adopts other tabs' changes live (storage events, boot reconcile). Resets,
imports and failed writes keep their full-overwrite and forced-key state.

Fingerprint the persisted schemas at build time (JSON Schema plus the
.refine limits in PERSISTED_LIMITS) and ship it in version.json. A tab whose
fingerprint differs from the deployed build stops saving, shows a banner
and disables Settings; onboarding, login import and token sign-in refuse
until it reloads.

Also:
- pause persistence after another tab changes the token until the account
  is confirmed, and discard unsaved keys on that change
- reload on a failed chunk load only once a newer deploy is known
- run tagged E2E specs on Firefox and WebKit in a separate CI job
- verify the live version.json after deploy and probe it in the WAF test
- drop BUILD_TIME from the bundle, move lazyWithReload and UpdateNavigator
  into their own modules, and fold unseenEntries into hasUnseen
- reset poll seen-item state when selected or upstream repos change
- strip htmlUrl and jiraStatus from imported tracked items
The Settings org/repo editors kept copies captured at mount, so a repo list adopted from another tab (live sync or an import there) was not shown, and the next edit in this tab saved the stale list over the other tab's repos. Bind the editors and summaries to the config store directly and drop the post-import resync.
deploy.yml built, tagged and verified against github.sha, which names the caller's commit rather than inputs.tag on a manual re-deploy of an older release. Resolve the checked-out commit after checkout, pass it to the build as BUILD_GIT_SHA (GITHUB_SHA cannot be overridden), check dist/client/version.json against it before wrangler deploy, and verify the live file against the same value.

This branch has not been deployed

No deployments
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