From 17ff374be796d73640d31d0c9ee33a2c75a80f7f Mon Sep 17 00:00:00 2001 From: Joe Julian Date: Sun, 29 Mar 2026 13:35:07 -0700 Subject: [PATCH] Resolve remote lifecycle landing conflicts --- main.go | 7 +++++-- main_test.go | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index 42307d2..76569d4 100644 --- a/main.go +++ b/main.go @@ -465,9 +465,12 @@ func (u *ui) describeActionError(label string, err error) string { return "" } if errors.Is(err, webdav.ErrConflict) || strings.Contains(err.Error(), webdav.ErrConflict.Error()) { - return fmt.Sprintf("%s failed: remote vault changed on the server; reopen the remote vault and retry", label) + return "Save conflict: the remote vault changed. Reopen it and retry the save." } - return fmt.Sprintf("%s failed: %v", label, err) + if label == "open remote vault" { + return fmt.Sprintf("%s failed: %v", label, err) + } + return err.Error() } func (u *ui) bannerSurface() uiBanner { diff --git a/main_test.go b/main_test.go index aa76ab6..9bde448 100644 --- a/main_test.go +++ b/main_test.go @@ -557,8 +557,8 @@ func TestUIRemoteSaveConflictShowsVisibleErrorAndKeepsDirtyState(t *testing.T) { u.runAction("save vault", u.saveAction) - if got := u.errorMessage; !strings.Contains(got, "remote vault changed on the server") { - t.Fatalf("errorMessage = %q, want visible remote conflict guidance", got) + if got := u.errorMessage; got != "Save conflict: the remote vault changed. Reopen it and retry the save." { + t.Fatalf("errorMessage = %q, want normalized save conflict guidance", got) } if got := u.statusMessage; got != "" { t.Fatalf("statusMessage = %q, want empty after remote save conflict", got)