diff --git a/assets/screenshots/resumeupdate.PNG b/assets/screenshots/resumeupdate.PNG
new file mode 100644
index 0000000..d8d0d9d
Binary files /dev/null and b/assets/screenshots/resumeupdate.PNG differ
diff --git a/docs/architecture/subsystems/resume-pipeline.md b/docs/architecture/subsystems/resume-pipeline.md
index 7172fc8..7839b7e 100644
--- a/docs/architecture/subsystems/resume-pipeline.md
+++ b/docs/architecture/subsystems/resume-pipeline.md
@@ -268,6 +268,12 @@ Exposed on the preload bridge as the `window.limboo.resume` namespace; see the
Matching the existing shell idioms exactly (pure-black tokens, no new patterns):
+
+
+The three surfaces work together: the **`ResumeBanner`** announces drift under the
+session header, the **Revalidating chip** shows the non-blocking check in flight, and
+**`ResumeDeltaDialog`** presents the full structured delta on demand.
+
- **`ResumeBanner`** — a row under the session header cloning the missing-worktree
banner (`h-9`, `border-b border-line bg-surface`): an info tone for ordinary
drift, a warning tone for a rewrite or root change. "Review" opens the detail
diff --git a/src/renderer/components/ui/SuccessCheck.tsx b/src/renderer/components/ui/SuccessCheck.tsx
new file mode 100644
index 0000000..5b24670
--- /dev/null
+++ b/src/renderer/components/ui/SuccessCheck.tsx
@@ -0,0 +1,37 @@
+/**
+ * SuccessCheck — a modern, self-drawing success checkmark. The ring and tick are
+ * revealed with a `stroke-dashoffset` draw (GPU-accelerated, no deps), tinted with
+ * the `success` token via `currentColor`. The animation keyframes live in
+ * `styles/index.css` and are disabled under reduced motion (the stroke renders
+ * fully drawn). Purely presentational.
+ */
+export function SuccessCheck({ size = 48, className }: { size?: number; className?: string }) {
+ return (
+
+ );
+}
diff --git a/src/renderer/components/ui/index.ts b/src/renderer/components/ui/index.ts
index ed97b45..26a0c55 100644
--- a/src/renderer/components/ui/index.ts
+++ b/src/renderer/components/ui/index.ts
@@ -5,5 +5,6 @@ export { EmptyState } from './EmptyState';
export { Badge } from './Badge';
export { Kbd } from './Kbd';
export { Spinner } from './Spinner';
+export { SuccessCheck } from './SuccessCheck';
export { CircularProgress } from './CircularProgress';
export { Waveform } from './Waveform';
diff --git a/src/renderer/features/activity/PlanPanel.tsx b/src/renderer/features/activity/PlanPanel.tsx
index 4e9a412..a73d4c1 100644
--- a/src/renderer/features/activity/PlanPanel.tsx
+++ b/src/renderer/features/activity/PlanPanel.tsx
@@ -47,7 +47,7 @@ import type {
SessionPlan,
TaskItem,
} from '@shared/types';
-import { EmptyState, IconButton, Spinner } from '@/renderer/components/ui';
+import { EmptyState, IconButton, Spinner, SuccessCheck } from '@/renderer/components/ui';
import { cn } from '@/renderer/lib/cn';
import {
applyRuntime,
@@ -324,6 +324,22 @@ function PlanView({
/>
)}
+ {/* Prominent completion banner — a large self-drawing checkmark when the
+ whole plan run has finished, so "execution is done" is impossible to miss. */}
+ {plan.status === 'completed' && (
+
+ You changed {changes.length} setting{changes.length === 1 ? '' : 's'} in this + session. Discarding reverts {changes.length === 1 ? 'it' : 'them'} to the values + from when you opened Settings. +
+