From 2b115a9635bab6b666e45e9cf106cec74d749e12 Mon Sep 17 00:00:00 2001 From: Michael Ramos Date: Mon, 2 Mar 2026 14:01:02 -0800 Subject: [PATCH 1/2] chore: open v0.10.0 pre-release fix branch Tracking two bugs found during pre-release testing. Co-Authored-By: Claude Opus 4.6 From 3a9e4a142e85d3e495c78e69a44d497d1a81fb6c Mon Sep 17 00:00:00 2001 From: Michael Ramos Date: Mon, 2 Mar 2026 14:45:52 -0800 Subject: [PATCH 2/2] fix: show error dialog on shared URL failure and fix import annotation merge MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug 1: When a shared URL fails to load (truncated hash, expired paste, missing encryption key), the portal now shows a warning dialog explaining the failure and an amber "Demo" badge so users know they're seeing sample content — not their data. Bug 2: Importing a teammate's share URL no longer replaces existing annotations. Uses React functional state updaters to avoid stale closures and passes the full merged annotation list to pendingSharedAnnotations so DOM highlights are re-applied for all annotations. Co-Authored-By: Claude Opus 4.6 --- packages/editor/App.tsx | 13 +++++++ packages/ui/components/Viewer.tsx | 12 +++++- packages/ui/hooks/useSharing.ts | 64 +++++++++++++++++++++++-------- 3 files changed, 70 insertions(+), 19 deletions(-) diff --git a/packages/editor/App.tsx b/packages/editor/App.tsx index d8131244..c749e3f8 100644 --- a/packages/editor/App.tsx +++ b/packages/editor/App.tsx @@ -453,6 +453,8 @@ const App: React.FC = () => { clearPendingSharedAnnotations, generateShortUrl, importFromShareUrl, + shareLoadError, + clearShareLoadError, } = useSharing( markdown, annotations, @@ -1277,6 +1279,7 @@ const App: React.FC = () => { isPlanDiffActive={isPlanDiffActive} onPlanDiffToggle={() => setIsPlanDiffActive(!isPlanDiffActive)} hasPreviousVersion={!linkedDocHook.isActive && planDiff.hasPreviousVersion} + showDemoBadge={!isApiMode && !isLoadingShared && !isSharedSession} onOpenLinkedDoc={linkedDocHook.open} linkedDocInfo={linkedDocHook.isActive ? { filepath: linkedDocHook.filepath!, onBack: linkedDocHook.back } : null} /> @@ -1386,6 +1389,16 @@ const App: React.FC = () => { showCancel /> + {/* Shared URL load failure warning */} + + {/* Save-to-notes toast */} {noteSaveToast && (
void; hasPreviousVersion?: boolean; + /** Show amber "Demo" badge (portal mode, no shared content loaded) */ + showDemoBadge?: boolean; } export interface ViewerHandle { @@ -93,6 +95,7 @@ export const Viewer = forwardRef(({ isPlanDiffActive, onPlanDiffToggle, hasPreviousVersion, + showDemoBadge, onOpenLinkedDoc, linkedDocInfo, }, ref) => { @@ -648,8 +651,8 @@ export const Viewer = forwardRef(({ linkedDocInfo ? 'border-2 border-primary' : 'border border-border/50' }`} > - {/* Repo info + plan diff badge + linked doc badge - top left */} - {(repoInfo || hasPreviousVersion || linkedDocInfo) && ( + {/* Repo info + plan diff badge + demo badge + linked doc badge - top left */} + {(repoInfo || hasPreviousVersion || showDemoBadge || linkedDocInfo) && (
{repoInfo && !linkedDocInfo && (
@@ -674,6 +677,11 @@ export const Viewer = forwardRef(({ hasPreviousVersion={hasPreviousVersion ?? false} /> )} + {showDemoBadge && !linkedDocInfo && ( + + Demo + + )} {linkedDocInfo && (