Skip to content

v0.14.1 Release Notes and Onboarding#2966

Merged
sawka merged 8 commits intomainfrom
sawka/rl-141
Mar 3, 2026
Merged

v0.14.1 Release Notes and Onboarding#2966
sawka merged 8 commits intomainfrom
sawka/rl-141

Conversation

@sawka
Copy link
Member

@sawka sawka commented Mar 3, 2026

No description provided.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 3, 2026

Walkthrough

This PR introduces v0.14.1 release infrastructure by adding release notes documentation, new onboarding UI components for a GitHub star prompt flow, a reusable gradient background component, and telemetry enhancements. Changes include updates to the onboarding version constant, creation of dedicated components for minor upgrade and patch upgrade flows, integration of GitHub star tracking events, and corresponding TypeScript type definitions and telemetry schema expansions. Preview and test files are updated to accommodate the new components.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ❓ Inconclusive No pull request description was provided by the author, making it impossible to assess relevance to the changeset. Add a description explaining the purpose of the v0.14.1 release notes and onboarding implementation for better context.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title 'v0.14.1 Release Notes and Onboarding' accurately summarizes the main changes across the changeset, which include adding v0.14.1 release notes documentation and implementing the corresponding onboarding components.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch sawka/rl-141

Tip

Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs).
Share your feedback on Discord.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@kilo-code-bot
Copy link
Contributor

kilo-code-bot bot commented Mar 3, 2026

Code Review Summary

Status: No Issues Found | Recommendation: Merge

Files Reviewed (10 files)
  • docs/docs/releasenotes.mdx - Release notes for v0.14.1
  • frontend/app/onboarding/onboarding-common.tsx - Version bump and gradient component extraction
  • frontend/app/onboarding/onboarding-starask.tsx - New star request component
  • frontend/app/onboarding/onboarding-upgrade-v0141.tsx - New v0.14.1 upgrade content
  • frontend/app/onboarding/onboarding.tsx - Added telemetry tracking for GitHub star interactions
  • frontend/app/onboarding/onboarding-upgrade-patch.tsx - Import for new v0.14.1 content
  • frontend/preview/previews/onboarding.preview.tsx - Preview updates for new components
  • frontend/types/gotypes.d.ts - Added AI proxy URL and onboarding page telemetry fields
  • pkg/telemetry/telemetrydata/telemetrydata.go - Added link action event and onboarding page field

Review Notes:

This PR adds v0.14.1 release notes and onboarding flow updates. The code is well-structured and follows the project's established patterns:

  • ✅ Telemetry tracking is consistent across all GitHub star interactions
  • ✅ New components follow React best practices with proper displayName
  • ✅ TypeScript types are properly generated from Go types
  • ✅ Component extraction (OnboardingGradientBg) improves code reusability
  • ✅ All async operations are properly handled
  • ✅ Event tracking includes proper page context for analytics

@cloudflare-workers-and-pages
Copy link

cloudflare-workers-and-pages bot commented Mar 3, 2026

Deploying waveterm with  Cloudflare Pages  Cloudflare Pages

Latest commit: d6dec03
Status: ✅  Deploy successful!
Preview URL: https://380e6a65.waveterm.pages.dev
Branch Preview URL: https://sawka-rl-141.waveterm.pages.dev

View logs

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
frontend/app/onboarding/onboarding-upgrade-minor.tsx (1)

133-183: ⚠️ Potential issue | 🟠 Major

Make the metadata write non-blocking in all three handlers to prevent UX flow stalls.

At lines 143, 161, and 178, await RpcApi.SetMetaCommand(...) blocks the handler. If the RPC call fails, the handler throws and setPageName("features") at lines 148, 165, and 182 never executes, leaving the user stuck on the welcome page.

Extract the metadata write to a helper that silently handles errors:

Proposed fix
+    const setGithubStarMeta = async (value: boolean) => {
+        const clientId = ClientModel.getInstance().clientId;
+        try {
+            await RpcApi.SetMetaCommand(TabRpcClient, {
+                oref: WOS.makeORef("client", clientId),
+                meta: { "onboarding:githubstar": value },
+            });
+        } catch {
+            // keep onboarding flow non-blocking
+        }
+    };
+
     const handleAlreadyStarred = async () => {
         RpcApi.RecordTEventCommand(
             TabRpcClient,
             {
                 event: "onboarding:githubstar",
                 props: { "onboarding:githubstar": "already", "onboarding:page": "minorupgrade" },
             },
             { noresponse: true }
         );
-        const clientId = ClientModel.getInstance().clientId;
-        await RpcApi.SetMetaCommand(TabRpcClient, {
-            oref: WOS.makeORef("client", clientId),
-            meta: { "onboarding:githubstar": true },
-        });
+        void setGithubStarMeta(true);
         setPageName("features");
     };
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/app/onboarding/onboarding-upgrade-minor.tsx` around lines 133 - 183,
The three handlers handleStarClick, handleAlreadyStarred, and handleMaybeLater
currently await RpcApi.SetMetaCommand which can block or throw and prevent
setPageName("features"); instead, make the meta write fire-and-forget: extract
the SetMetaCommand call into a small helper (e.g., writeMetaNoBlock or
setMetaAsync) that invokes RpcApi.SetMetaCommand without awaiting, catches and
logs any errors (but does not rethrow), and call that helper from each handler
before or after calling setPageName("features") so setPageName always runs even
if the RPC fails.
🧹 Nitpick comments (2)
frontend/app/onboarding/onboarding.tsx (1)

38-52: Consider extracting shared GitHub-star telemetry/meta logic into one helper.

The same record-event + set-meta sequence now exists in multiple handlers with only page/choice differences, which increases drift risk.

Also applies to: 190-216

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/app/onboarding/onboarding.tsx` around lines 38 - 52, The telemetry +
meta update logic in handlers like handleStarClick currently duplicates the
RpcApi.RecordTEventCommand + RpcApi.SetMetaCommand sequence; extract a single
helper function (e.g., sendOnboardingChoice or recordOnboardingAction) that
accepts parameters for event props (page and choice) and performs
RpcApi.RecordTEventCommand(TabRpcClient, {...}) then
RpcApi.SetMetaCommand(TabRpcClient, { oref: WOS.makeORef("client",
ClientModel.getInstance().clientId), meta: { ["onboarding:githubstar"]?: boolean
| other key } }); replace handleStarClick and the similar handlers (the other
occurrences around the later handlers) to call this helper with the appropriate
page and choice values so all recording and meta-setting logic is centralized
and consistent.
frontend/app/onboarding/onboarding-starask.tsx (1)

31-31: Remove the noopener,noreferrer suggestion from this review.

In Electron applications, window.open(..., "_blank") opens external links in the system's default browser, creating a security boundary that prevents window.opener access. The noopener,noreferrer attributes do not apply in this context. Since page values are hardcoded internally ("upgrade" is the only value used), URL encoding is a minor hardening measure but not critical.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/app/onboarding/onboarding-starask.tsx` at line 31, Remove the
earlier suggestion to add "noopener,noreferrer" — leave the external-open
behavior using window.open(..., "_blank") in onboarding-starask.tsx because
Electron already opens external links in the system browser; no
noopener/noreferrer is required. If you want a minor hardening, URL-encode the
page variable used in the template string by replacing
`\`https://github.com/wavetermdev/waveterm?ref=${page}\`` with
`\`https://github.com/wavetermdev/waveterm?ref=${encodeURIComponent(page)}\``
when calling window.open, but do not add noopener/noreferrer.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/docs/releasenotes.mdx`:
- Line 32: Replace the misspelled word "intermittant" in the release notes
sentence "Fixed intermittant bugs with connection switching in terminal blocks"
with the correct spelling "intermittent" so the line reads "Fixed intermittent
bugs with connection switching in terminal blocks".

In `@frontend/app/onboarding/onboarding-starask.tsx`:
- Around line 52-62: The clickable repo area uses a non-semantic <div> with
handleRepoLinkClick, which is not keyboard-accessible; replace that <div> with a
semantic <a> element that includes
href="https://github.com/wavetermdev/waveterm", target="_blank", rel="noopener
noreferrer" and keeps the onClick handler (RpcApi.RecordTEventCommand call in
handleRepoLinkClick) and an appropriate aria-label so it is focusable and
activates with Enter/Space via native browser behavior.
- Around line 17-33: The handlers handleStarClick and handleAlreadyStarred call
RpcApi.SetMetaCommand and then onClose(), but if SetMetaCommand rejects the
modal stays open; wrap the RpcApi.SetMetaCommand(...) call in a try/finally so
onClose() is executed regardless of success or error. Specifically, in
handleStarClick and handleAlreadyStarred, surround the await
RpcApi.SetMetaCommand(TabRpcClient, { oref: WOS.makeORef("client",
ClientModel.getInstance().clientId), meta: { "onboarding:githubstar": true } })
(and the corresponding meta call in the other handler) with try { await ... }
finally { onClose(); } while leaving the event-recording and window.open logic
as appropriate.

---

Outside diff comments:
In `@frontend/app/onboarding/onboarding-upgrade-minor.tsx`:
- Around line 133-183: The three handlers handleStarClick, handleAlreadyStarred,
and handleMaybeLater currently await RpcApi.SetMetaCommand which can block or
throw and prevent setPageName("features"); instead, make the meta write
fire-and-forget: extract the SetMetaCommand call into a small helper (e.g.,
writeMetaNoBlock or setMetaAsync) that invokes RpcApi.SetMetaCommand without
awaiting, catches and logs any errors (but does not rethrow), and call that
helper from each handler before or after calling setPageName("features") so
setPageName always runs even if the RPC fails.

---

Nitpick comments:
In `@frontend/app/onboarding/onboarding-starask.tsx`:
- Line 31: Remove the earlier suggestion to add "noopener,noreferrer" — leave
the external-open behavior using window.open(..., "_blank") in
onboarding-starask.tsx because Electron already opens external links in the
system browser; no noopener/noreferrer is required. If you want a minor
hardening, URL-encode the page variable used in the template string by replacing
`\`https://github.com/wavetermdev/waveterm?ref=${page}\`` with
`\`https://github.com/wavetermdev/waveterm?ref=${encodeURIComponent(page)}\``
when calling window.open, but do not add noopener/noreferrer.

In `@frontend/app/onboarding/onboarding.tsx`:
- Around line 38-52: The telemetry + meta update logic in handlers like
handleStarClick currently duplicates the RpcApi.RecordTEventCommand +
RpcApi.SetMetaCommand sequence; extract a single helper function (e.g.,
sendOnboardingChoice or recordOnboardingAction) that accepts parameters for
event props (page and choice) and performs
RpcApi.RecordTEventCommand(TabRpcClient, {...}) then
RpcApi.SetMetaCommand(TabRpcClient, { oref: WOS.makeORef("client",
ClientModel.getInstance().clientId), meta: { ["onboarding:githubstar"]?: boolean
| other key } }); replace handleStarClick and the similar handlers (the other
occurrences around the later handlers) to call this helper with the appropriate
page and choice values so all recording and meta-setting logic is centralized
and consistent.

ℹ️ Review info

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between df24959 and d6dec03.

📒 Files selected for processing (10)
  • docs/docs/releasenotes.mdx
  • frontend/app/onboarding/onboarding-common.tsx
  • frontend/app/onboarding/onboarding-starask.tsx
  • frontend/app/onboarding/onboarding-upgrade-minor.tsx
  • frontend/app/onboarding/onboarding-upgrade-patch.tsx
  • frontend/app/onboarding/onboarding-upgrade-v0141.tsx
  • frontend/app/onboarding/onboarding.tsx
  • frontend/preview/previews/onboarding.preview.tsx
  • frontend/types/gotypes.d.ts
  • pkg/telemetry/telemetrydata/telemetrydata.go


**Other Changes:**

- Fixed intermittant bugs with connection switching in terminal blocks
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix spelling typo in the release notes.

Line 32 uses “intermittant”; it should be “intermittent”.

✏️ Suggested fix
-- Fixed intermittant bugs with connection switching in terminal blocks
+- Fixed intermittent bugs with connection switching in terminal blocks
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Fixed intermittant bugs with connection switching in terminal blocks
- Fixed intermittent bugs with connection switching in terminal blocks
🧰 Tools
🪛 LanguageTool

[grammar] ~32-~32: Ensure spelling is correct
Context: ...er presets Other Changes: - Fixed intermittant bugs with connection switching in termi...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/docs/releasenotes.mdx` at line 32, Replace the misspelled word
"intermittant" in the release notes sentence "Fixed intermittant bugs with
connection switching in terminal blocks" with the correct spelling
"intermittent" so the line reads "Fixed intermittent bugs with connection
switching in terminal blocks".

Comment on lines +17 to +33
const handleStarClick = async () => {
RpcApi.RecordTEventCommand(
TabRpcClient,
{
event: "onboarding:githubstar",
props: { "onboarding:githubstar": "star", "onboarding:page": page },
},
{ noresponse: true }
);
const clientId = ClientModel.getInstance().clientId;
await RpcApi.SetMetaCommand(TabRpcClient, {
oref: WOS.makeORef("client", clientId),
meta: { "onboarding:githubstar": true },
});
window.open(`https://github.com/wavetermdev/waveterm?ref=${page}`, "_blank");
onClose();
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

find . -name "onboarding-starask.tsx" -type f

Repository: wavetermdev/waveterm

Length of output: 112


🏁 Script executed:

cat -n ./frontend/app/onboarding/onboarding-starask.tsx

Repository: wavetermdev/waveterm

Length of output: 5951


Wrap SetMetaCommand calls in try/finally to ensure onClose() always executes.

If SetMetaCommand rejects at lines 27, 45, or 74, the subsequent onClose() calls at lines 32, 49, and 78 will not run, leaving the modal open unintentionally. Ensure these handlers always close the modal regardless of RPC success or failure:

Suggested pattern
     const handleMaybeLater = async () => {
         RpcApi.RecordTEventCommand(
             TabRpcClient,
             {
                 event: "onboarding:githubstar",
                 props: { "onboarding:githubstar": "later", "onboarding:page": page },
             },
             { noresponse: true }
         );
-        const clientId = ClientModel.getInstance().clientId;
-        await RpcApi.SetMetaCommand(TabRpcClient, {
-            oref: WOS.makeORef("client", clientId),
-            meta: { "onboarding:githubstar": false },
-        });
-        onClose();
+        try {
+            const clientId = ClientModel.getInstance().clientId;
+            await RpcApi.SetMetaCommand(TabRpcClient, {
+                oref: WOS.makeORef("client", clientId),
+                meta: { "onboarding:githubstar": false },
+            });
+        } finally {
+            onClose();
+        }
     };

Also applies to handleStarClick and handleAlreadyStarred.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const handleStarClick = async () => {
RpcApi.RecordTEventCommand(
TabRpcClient,
{
event: "onboarding:githubstar",
props: { "onboarding:githubstar": "star", "onboarding:page": page },
},
{ noresponse: true }
);
const clientId = ClientModel.getInstance().clientId;
await RpcApi.SetMetaCommand(TabRpcClient, {
oref: WOS.makeORef("client", clientId),
meta: { "onboarding:githubstar": true },
});
window.open(`https://github.com/wavetermdev/waveterm?ref=${page}`, "_blank");
onClose();
};
const handleStarClick = async () => {
RpcApi.RecordTEventCommand(
TabRpcClient,
{
event: "onboarding:githubstar",
props: { "onboarding:githubstar": "star", "onboarding:page": page },
},
{ noresponse: true }
);
try {
const clientId = ClientModel.getInstance().clientId;
await RpcApi.SetMetaCommand(TabRpcClient, {
oref: WOS.makeORef("client", clientId),
meta: { "onboarding:githubstar": true },
});
} finally {
window.open(`https://github.com/wavetermdev/waveterm?ref=${page}`, "_blank");
onClose();
}
};
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/app/onboarding/onboarding-starask.tsx` around lines 17 - 33, The
handlers handleStarClick and handleAlreadyStarred call RpcApi.SetMetaCommand and
then onClose(), but if SetMetaCommand rejects the modal stays open; wrap the
RpcApi.SetMetaCommand(...) call in a try/finally so onClose() is executed
regardless of success or error. Specifically, in handleStarClick and
handleAlreadyStarred, surround the await RpcApi.SetMetaCommand(TabRpcClient, {
oref: WOS.makeORef("client", ClientModel.getInstance().clientId), meta: {
"onboarding:githubstar": true } }) (and the corresponding meta call in the other
handler) with try { await ... } finally { onClose(); } while leaving the
event-recording and window.open logic as appropriate.

Comment on lines +52 to +62
const handleRepoLinkClick = () => {
RpcApi.RecordTEventCommand(
TabRpcClient,
{
event: "action:link",
props: { "action:type": "githubrepo", "onboarding:page": page },
},
{ noresponse: true }
);
window.open("https://github.com/wavetermdev/waveterm", "_blank");
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

find . -name "onboarding-starask.tsx" -o -name "*starask*"

Repository: wavetermdev/waveterm

Length of output: 112


🏁 Script executed:

wc -l ./frontend/app/onboarding/onboarding-starask.tsx

Repository: wavetermdev/waveterm

Length of output: 116


🏁 Script executed:

cat -n ./frontend/app/onboarding/onboarding-starask.tsx

Repository: wavetermdev/waveterm

Length of output: 5951


Use a semantic link for the repo target to enable keyboard accessibility.

The <div> element at line 95 with an onClick handler is not keyboard-accessible—it can't be focused with Tab and won't respond to Enter/Space keys. Replace it with an <a> tag:

Accessible alternative
-                    <div
+                    <a
+                        href="https://github.com/wavetermdev/waveterm"
+                        target="_blank"
+                        rel="noopener noreferrer"
                         className="group flex items-center justify-center gap-2 text-secondary text-sm mt-1 cursor-pointer transition-colors"
                         onClick={handleRepoLinkClick}
                     >
                         <i className="fa-brands fa-github text-foreground text-lg group-hover:text-accent transition-colors" />
                         <span className="text-foreground font-mono text-sm group-hover:text-accent group-hover:underline transition-colors">
                             wavetermdev/waveterm
                         </span>
-                    </div>
+                    </a>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/app/onboarding/onboarding-starask.tsx` around lines 52 - 62, The
clickable repo area uses a non-semantic <div> with handleRepoLinkClick, which is
not keyboard-accessible; replace that <div> with a semantic <a> element that
includes href="https://github.com/wavetermdev/waveterm", target="_blank",
rel="noopener noreferrer" and keeps the onClick handler
(RpcApi.RecordTEventCommand call in handleRepoLinkClick) and an appropriate
aria-label so it is focusable and activates with Enter/Space via native browser
behavior.

@sawka sawka merged commit b5d23e5 into main Mar 3, 2026
9 of 10 checks passed
@sawka sawka deleted the sawka/rl-141 branch March 3, 2026 16:58
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