feat(app): add "What's new" changelog viewer to the Help menu#2684
Conversation
Adds a "What's new" item to the Help menu that opens a modal rendering CHANGELOG.md as Markdown (react-markdown, existing .hdx-markdown styles), mirroring the existing Keyboard Shortcuts modal. The changelog is copied into public/ from next.config.mjs so it ships as a static asset in every build mode (dev/Turbopack, prod/Webpack, and the ClickStack static export) without relying on Yarn lifecycle pre-scripts, which Yarn 4 does not run. The fetch is basePath-aware for the ClickStack build, where .md is now allow-listed in the export cleanup, and uses TanStack Query for load/error/caching. Includes an E2E assertion that the menu item opens the modal with rendered Markdown.
🦋 Changeset detectedLatest commit: 6251fd5 The changes in this PR will be included in the next version bump. This PR includes changesets to release 3 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
🔴 Tier 4 — CriticalTouches auth, data models, config, tasks, OTel pipeline, ClickHouse, or CI/CD. Why this tier:
Review process: Deep review from a domain expert. Synchronous walkthrough may be required. Stats
|
Greptile SummaryThis PR adds an in-app changelog viewer from the Help menu. The main changes are:
Confidence Score: 5/5This looks safe to merge.
Important Files Changed
Reviews (5): Last reviewed commit: "Merge branch 'main' into jordansimonovsk..." | Re-trigger Greptile |
E2E Test Results✅ All tests passed • 243 passed • 1 skipped • 1046s
Tests ran across 4 shards in parallel. |
Deep Review✅ No critical issues found. The build path is sound ( 🟡 P2 -- recommended
🔵 P3 nitpicks (5)
Reviewers (10): ce-correctness-reviewer, ce-testing-reviewer, ce-maintainability-reviewer, ce-project-standards-reviewer, ce-kieran-typescript-reviewer, ce-julik-frontend-races-reviewer, ce-reliability-reviewer, ce-adversarial-reviewer, ce-agent-native-reviewer, ce-learnings-researcher. Testing gaps:
|
- Fix unit tests: react-markdown v10 is ESM-only and Jest cannot parse it, so any suite importing AppNav (via ChangelogModal) failed. Add a jest mock mapped through moduleNameMapper, mirroring the existing ky mock. - Fix the changelog being absent in the production Docker images: the builder stages never COPY CHANGELOG.md, so next.config's copyFileSync threw ENOENT (silently caught) and the modal 404d at runtime. COPY it into both builder stages and make the copy fail loudly during a production build. - Cover the failure path: add an E2E test that stubs the asset to 404 and asserts the fallback message, and make the happy-path assertion settle on either outcome so a broken copy fails fast instead of timing out.
|
Addressed the failing unit check and the review feedback: Unit tests (was failing). deep-review P1 — changelog missing in the Docker images. The builder stages never deep-review P2 / Greptile P2 — untested failure path. Added an E2E test that stubs deep-review P3 nitpicks (e.g. |
brandon-pereira
left a comment
There was a problem hiding this comment.
LGTM - @elizabetdev has some suggestions to improve it further, but this can be a V1
Adds a "What's new" item to the Help menu that opens a modal rendering the app's
CHANGELOG.mdas Markdown, so users can see what shipped without leaving the product. It mirrors the existing Keyboard Shortcuts modal and reuses the app's.hdx-markdownstyles andreact-markdown.CleanShot.2026-07-20.at.20.35.29.mp4
What changed
ChangelogModaland a "What's new"Menu.Itemin the Help menu. The changelog is fetched lazily on first open and cached.CHANGELOG.mdis copied intopublic/fromnext.config.mjsso it ships as a static asset in every build mode..mdis added to the ClickStack export allowlist so the asset survives the export cleanup step.Key decisions
next.config.mjs, not apackage.jsonpre-script. Yarn 4 does not run arbitrarypre*/post*lifecycle scripts, so apredev/prebuildhook would silently never run.next.configis evaluated by bothnext dev(Turbopack) andnext build(Webpack), so one place covers every mode.useRouter().basePath. The ClickStack build serves under/clickstack, following the existing precedent inDBSearchPage.tsx.Background
The app ships in three build modes — dev (Turbopack), production (Webpack), and a ClickStack static export (
output: export,basePath: /clickstack). The export runsscripts/prepare-clickhouse-build-export.js, which deletes any file whose extension isn't allowlisted; that's why.mdhad to be added there.Impact
User-facing: a new Help-menu entry. No API, schema, or config changes. If the changelog can't be loaded the modal degrades to an "Unable to load" message. Changeset included (
@hyperdx/appminor).Implementation detail
enabled: opened,staleTime: Infinity) for load/error/caching rather than a hand-rolleduseEffectfetch, matching the codebase convention.# @hyperdx/apppackage heading is stripped from the Markdown before rendering.public/CHANGELOG.mdis generated and gitignored.tsc --noEmitand thenavigationE2E spec (which was re-run after deleting the generated file, confirming thenext.configcopy path works on a clean tree).