aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-common/src/meshbay_common/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-common/src/meshbay_common/__init__.py')
-rw-r--r--packages/meshbay-common/src/meshbay_common/__init__.py35
1 files changed, 34 insertions, 1 deletions
diff --git a/packages/meshbay-common/src/meshbay_common/__init__.py b/packages/meshbay-common/src/meshbay_common/__init__.py
index b3e24e3..ac69e18 100644
--- a/packages/meshbay-common/src/meshbay_common/__init__.py
+++ b/packages/meshbay-common/src/meshbay_common/__init__.py
@@ -93,5 +93,38 @@ __version__ = "0.11.0"
# The index at rest, `index_progress` (counters only, never a path — see
# `groupbox.py` and daemon.py `_push_index_progress`), chat, and file content
# on the operator's disk are all deliberately unchanged.
-MNP_VERSION = "1.1"
+# 1.1: `index_delta` carries `roots` (additive — a 1.0 client ignores it), and
+# the per-root/per-app operations: `root_update`/`root_eject`/`root_plug`,
+# `app_directories`, `chat_directory`, `chat_link_preview`.
+# 2.0: the **write** path is sealed, and the last unencrypted content message
+# is gone.
+#
+# - `file_upload` and `file_upload_ack` travel sealed under a GEK-derived
+# subkey (`groupbox.PURPOSE_UPLOAD`). The filename, the destination folder
+# and the bytes all ride inside the seal; `upload_id` — a fresh
+# client-chosen correlation id — and `chunk_index` stay in clear because
+# the node routes and orders on them. `filename` used to be the
+# correlation key and cannot be any more, which is what forced `upload_id`.
+# - `stream_seg` is **removed**. It answered with an MPEG-TS segment as
+# base64 with no encryption at all, on both transports, to any
+# authenticated member — the one content-plane message that never went
+# through a GEK-derived key. `stream_data` has done the job properly since
+# Phase 12, and `fetchStreamSegment`, its only browser caller, was defined
+# and never once invoked.
+#
+# **Breaking, on the wire every deployed client speaks**, and MAJOR by the same
+# rule 1.0 was: a 1.x client's upload reaches a 2.0 node with no `filename` and
+# no `data` outside the seal. That is why the break is confined rather than
+# total — `MNP_MIN_SUPPORTED` stays at "1.0", so a 1.x peer still connects,
+# browses, downloads, streams and chats; only its uploads are refused, with
+# `upload_not_sealed` and a message saying which side is old. A client refuses
+# symmetrically before sending (`supportsSealedUpload` in transport.js), so
+# neither side discovers this as a timeout.
+#
+# Still deliberately in clear, and none of it is content: the handshake itself,
+# `index_progress` (counters only — see daemon.py `_push_index_progress`), the
+# admin and configuration acks, and the media-metadata replies. Chat is next,
+# under sender keys. The index at rest and file content on the operator's disk
+# are unchanged.
+MNP_VERSION = "2.0"
MHP_VERSION = "0.1"