You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(rpc): addClient extends the shared proxy instead of dropping methods (F8)
The F8 client-proxy cache in RpcHub.addClient was keyed by (peer, service
name) only, so a second addClient for the same service name returned the
first proxy verbatim. When two call sites register different defs under one
name — as ts/e2e/ts-dotnet-perf.ts does, splitting ITypeScriptTestComputeService
into a call-methods def (Add/GetValue) and a stream def (StreamInt32) — the
later def's methods were silently missing from the returned proxy, failing
the .NET-driven StreamPerformance test with "svc.StreamInt32 is not a function".
addClient now merges each def into a single shared proxy per (peer, name):
methods absent from the proxy are added (superset extends it), preserving F8's
singleton-proxy guarantee (same proxy object, one ComputeFunction per method,
one shared computed/invalidation stream). A genuinely conflicting re-registration
(same method name + argCount, different wire signature) throws a clear error,
matching C#'s ServiceNameConflict/MethodNameConflict spirit — the API fails
loudly rather than serving a method-less proxy silently.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SDiBQM5rnhyBG1asuP1kDi
Copy file name to clipboardExpand all lines: docs/plans/ts-port-audit.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -905,7 +905,7 @@ Confidence: confirmed.
905
905
906
906
### F8. No deduplication of remote computeds across proxies — each `addClient` mints a fresh key space
907
907
908
-
Status: **closed** — fixed 2026-07-15 (batch fusionrpc3; proxy cached per `(peer, service name)` in the base `RpcHub.addClient`).
908
+
Status: **closed** — fixed 2026-07-15 (batch fusionrpc3; proxy cached per `(peer, service name)` in the base `RpcHub.addClient`). Refined same day (batch e2efix) after the .NET-driven e2e caught a regression: the cache silently dropped methods when a second, different def used the same service name (`ts-dotnet-perf.ts` registers disjoint defs) — `addClient` now merges defs into one shared proxy (existing methods and their `ComputeFunction`s preserved; different arities coexist as overloads, wire-name parity) and throws on genuinely conflicting signatures, validate-first so a rejected def changes nothing.
0 commit comments