fix(live): Wiederverbindung sendet nie von selbst — Server-Stand oder Rückfrage (D89-Nachtrag 2)
Ein Fenster, das mit altem Text aufwachte, schickte ihn beim Wiederverbinden als Diff und überschrieb den aktuellen Plan (v660, v679). Jetzt entscheidet, ob seit dem letzten Abgleich hier gearbeitet wurde: nein → Server-Stand übernehmen (lokaler Text in die Sicherungen), ja → Konflikt-Band fragt. Regel headless in live.js (reconnectAction), Bandtext in neun Sprachen. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
2e408d956c
commit
28ff6844b0
@@ -2,6 +2,7 @@ import {describe, it, expect} from 'vitest';
|
||||
import {
|
||||
liveUrls, normalize, lines, text, computeOps, applyOps,
|
||||
mapLine, caretToLineCol, lineColToCaret, feedAction, serverBase, documentsUrl, infoUrl,
|
||||
reconnectAction,
|
||||
} from '../src/live.js';
|
||||
|
||||
describe('Adressen', () => {
|
||||
@@ -243,3 +244,20 @@ describe('Feed-Antwort anwenden oder nicht', () => {
|
||||
expect(feedAction({fromVersion: null, currentVersion: 87, content: 'x'}, 4, true)).toBe('skip');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Wiederverbindung (D89-Nachtrag 2)', () => {
|
||||
// Der Vorfall: Ein Telefon wacht mit dem Stand vom Vortag auf, die Sitzung
|
||||
// ist tot, ein Tipp auf ein Falt-Zeichen — und die alte Fassung ging als
|
||||
// Diff über den aktuellen Plan. Entscheidend ist nicht, ob die Texte
|
||||
// abweichen, sondern ob hier gearbeitet wurde.
|
||||
it('gleicher Text: nichts zu entscheiden', () => {
|
||||
expect(reconnectAction(false, 'a\nb', 'a\nb')).toBe('none');
|
||||
expect(reconnectAction(true, 'a\r\nb', 'a\nb')).toBe('none'); // Zeilenenden normalisiert
|
||||
});
|
||||
it('nicht gearbeitet: der Server gilt, auch wenn der lokale Text abweicht', () => {
|
||||
expect(reconnectAction(false, 'alter Stand', 'neuer Stand')).toBe('adopt');
|
||||
});
|
||||
it('gearbeitet: fragen statt senden — beide Stände existieren', () => {
|
||||
expect(reconnectAction(true, 'alter Stand plus Faltmarke', 'neuer Stand')).toBe('ask');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user