aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-09-10 12:20:07 +0200
committerChristophe Besson <cbesson@gmail.com>2026-09-10 12:20:07 +0200
commit6964ff112fec47498ed778a491cf2a1490392c79 (patch)
treeaf7ab9d4a9ca1cff804182b47995b6a4d4890469 /packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py
parent45d63060a975473367a0f0312572b349a5c448a4 (diff)
downloadmeshbay-6964ff112fec47498ed778a491cf2a1490392c79.tar.gz
fix(node): report the transfer cap the node actually enforces
`transfer_state` read `slots.per_member` — the node-wide default — while `_has_room` decides with `member_cap()`, which prefers the group's own signed limit, and the handshake ack announces that same `member_cap()`. Three readings of one number, and one of them was the odd one out. In a group where the operator signed a higher limit, every lease update told the client "cap: 2" while the node would grant five: the transfers widget draws `used >= cap` as saturated, so a member with two transfers running saw the rest of their slots disappear. Lowered the other way it is worse in the other direction — the interface offers slots the node will queue. Nothing was ever granted or refused wrongly; the enforcement was right on both paths. It is the number beside it that contradicted them. Two tests, one override above the default and one below, because a bug that reads the node-wide value passes the first whenever the default happens to be the larger number. Node suite 1215 passed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AsoWC3GmhNdwVFomW3QjH3
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py')
-rw-r--r--packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py
index a0efa83..11412bf 100644
--- a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py
+++ b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py
@@ -3440,8 +3440,12 @@ class WebRTCPeerSession:
"state": state,
"kind": lease.kind,
"used": slots.member_in_use(lease.kind, lease.member),
- "cap": slots.per_member.get(lease.kind,
- transfers_mod.DEFAULT_MAX_PER_MEMBER),
+ # `member_cap`, not the node-wide default: this group's own limit is
+ # what `_has_room` enforces and what the handshake ack announces, so
+ # reading the default here would have the widget contradicting both
+ # — "1 of 2" in a group where the operator signed 5, or two slots
+ # offered in a group limited to one.
+ "cap": slots.member_cap(lease.kind, lease.member),
"node_used": slots.in_use(lease.kind),
"node_cap": slots.caps.get(lease.kind,
transfers_mod.DEFAULT_MAX_CONCURRENT),