From ca5b284e9a26ec5d1e8d372ed03aa48a7c4c6b31 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Tue, 26 May 2026 16:08:33 +0200 Subject: [PATCH] Remove _diff marker: use self-describing jay_diff protocol MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Server (network.py): send every record in diff mode starting from prev={}, including the first — fixes history drop on new client connect. Collect (collect.py): remove payload["_diff"] = True from live broadcast. GUI client (gui_client.py): always call jay_merge_full in diff mode; drop the _diff key check that gated reconstruction. CLI client (client.py): fix `args.diff or True` guard that made --diff irrelevant. Co-Authored-By: Claude Sonnet 4.6 --- client.py | 6 +----- collect.py | 1 - gui_client.py | 6 +----- server/network.py | 12 ++++-------- 4 files changed, 6 insertions(+), 19 deletions(-) diff --git a/client.py b/client.py index 5ff5957..843e344 100644 --- a/client.py +++ b/client.py @@ -57,11 +57,7 @@ def main() -> None: try: data = json.loads(line) if args.diff: - if data.get("_diff"): - diff = {k: v for k, v in data.items() if k != "_diff"} - state = jay_merge_full(state, diff) - else: - state = data + state = jay_merge_full(state, data) display = state else: display = data diff --git a/collect.py b/collect.py index effb68d..c1f7664 100644 --- a/collect.py +++ b/collect.py @@ -131,7 +131,6 @@ def run(args: argparse.Namespace) -> None: save_store(out, store, args.max_records) if args.diff and last_broadcast: payload = jay_diff_full(last_broadcast, snapshot, combine_upd_add=True) - payload["_diff"] = True else: payload = snapshot network.broadcast(payload, push_clients, push_lock) diff --git a/gui_client.py b/gui_client.py index 21a7ad6..c7fae07 100644 --- a/gui_client.py +++ b/gui_client.py @@ -159,11 +159,7 @@ class TcpReader(QObject): try: data = json.loads(line) if self._diff_mode: - if data.get("_diff"): - diff = {k: v for k, v in data.items() if k != "_diff"} - self._state = jay_merge_full(self._state, diff) - else: - self._state = data + self._state = jay_merge_full(self._state, data) self.message.emit(copy.deepcopy(self._state)) else: self.message.emit(data) diff --git a/server/network.py b/server/network.py index ed774f0..b7703b0 100644 --- a/server/network.py +++ b/server/network.py @@ -31,16 +31,12 @@ def _accept_loop( records = in_mem try: - if store_ref.get("diff_mode") and len(records) > 1: - lines = [json.dumps(records[0], default=str) + "\n"] - prev = records[0] - for record in records[1:]: + if store_ref.get("diff_mode"): + prev: dict = {} + for record in records: diff = jay_diff_full(prev, record, combine_upd_add=True) - diff["_diff"] = True - lines.append(json.dumps(diff, default=str) + "\n") prev = record - for line in lines: - conn.sendall(line.encode()) + conn.sendall((json.dumps(diff, default=str) + "\n").encode()) else: for record in records: conn.sendall((json.dumps(record, default=str) + "\n").encode())