Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
152c16b
feat(desktop): merge external changes into unsaved edits three-way
ocavue Oct 7, 2026
8f5c9f0
fix(desktop): keep merge previews honest: invalidate on typing, CAS o…
ocavue Oct 7, 2026
deae21f
fix(desktop): park the marked merge if typing continued during the re…
ocavue Oct 7, 2026
76fec93
Merge remote-tracking branch 'origin/master' into git_P2.3_session_merge
ocavue Oct 7, 2026
20fe455
refactor(desktop): write editor conflicts into the note instead of pa…
ocavue Oct 7, 2026
d67ba00
fix(desktop): keep the dirty buffer until the conflict copy holds it
ocavue Oct 7, 2026
eb6bd2f
fix(desktop): one conflict copy per reconciliation, overwritten only …
ocavue Oct 7, 2026
c00e5c8
Merge remote-tracking branch 'origin/master' into git_P2.3_session_merge
ocavue Oct 7, 2026
f15f848
fix(desktop): clear the save error once a reconciliation lands, widen…
ocavue Oct 7, 2026
b9e1164
fix(desktop): a flush settles the merge it ran into; no adopt without…
ocavue Oct 7, 2026
b294e9d
fix(desktop): a clean merge the editor cannot round-trip is written e…
ocavue Oct 7, 2026
b1e6613
fix(desktop): finish a reconciliation the final flush started, and ru…
ocavue Oct 9, 2026
3cfa1fa
test(desktop): restore mocks after every session test
ocavue Oct 9, 2026
2f73dc7
fix(desktop): a merged title from another device is not this user's r…
ocavue Oct 9, 2026
932c261
fix(desktop): the notice for edits kept beside a note can be acknowle…
ocavue Oct 9, 2026
33b2c19
docs: name the test for a failed conflict copy in S8
ocavue Oct 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 0 additions & 41 deletions apps/desktop/src/components/note-conflict-banner.test.tsx

This file was deleted.

35 changes: 0 additions & 35 deletions apps/desktop/src/components/note-conflict-banner.tsx

This file was deleted.

6 changes: 1 addition & 5 deletions apps/desktop/src/components/note-save-alerts.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import type { ReactElement } from 'react'
import { InlineAlert } from '@/components/inline-alert.tsx'
import { NoteConflictBanner } from '@/components/note-conflict-banner.tsx'
import type { AssetSaveError } from '@/editor/use-asset-persistence.ts'
import type { NoteDocument } from '@/editor/use-note-document.ts'

Expand All @@ -10,7 +9,7 @@ interface NoteSaveAlertsProps {
assetSaveError?: AssetSaveError | null
}

/** What went wrong saving a ready document, and the external-change conflict prompt. */
/** What went wrong saving a ready document. */
export function NoteSaveAlerts({
document,
assetSaveError = null,
Expand All @@ -29,9 +28,6 @@ export function NoteSaveAlerts({
{assetSaveError.message}. It was not added to the note.
</InlineAlert>
) : null}
{document.conflict !== null ? (
<NoteConflictBanner onKeepMine={document.keepMine} onLoadTheirs={document.loadTheirs} />
) : null}
</>
)
}
4 changes: 2 additions & 2 deletions apps/desktop/src/editor/alias-placement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import { openSession } from './open-documents.ts'
* Placement routes through the live session whenever the note is open — in
* the renaming pane or a *reopened* one (the open-documents service is the
* one liveness signal). A direct disk write under a reopened dirty buffer
* would park a conflict caused by our own background work, and "keep mine"
* would silently drop the alias. Only when no session can take the patch
* would force a merge against our own background work. Only when no
* session can take the patch
* does the alias go straight to disk; a loading/clean session reconciles it
* like any external change, and a header-only patch is body-safe even for
* protected notes.
Expand Down
2 changes: 0 additions & 2 deletions apps/desktop/src/editor/document-binding.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,10 @@ function fakeSession(path: string) {
editorChanged: () => {},
externalChanged: () => {},
flush,
keepMine: () => {},
isDirty: () => false,
isUnpersisted: () => false,
prepareDelete: async () => false,
cancelDelete: () => {},
loadTheirs: () => {},
commitFrontmatter: async () => true,
content: () => '',
liveContent: () => '',
Expand Down
2 changes: 0 additions & 2 deletions apps/desktop/src/editor/move-note.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,10 @@ function fakeSession(path: string) {
editorChanged: () => {},
externalChanged: () => {},
flush,
keepMine: () => {},
isDirty: () => false,
isUnpersisted: () => false,
prepareDelete: async () => false,
cancelDelete: () => {},
loadTheirs: () => {},
commitFrontmatter: async () => true,
content: () => '',
liveContent: () => '',
Expand Down
Loading
Loading