fix: resolve code-review findings (locally verified)

Server-054/055/056, Contracts-020/021/022, Tests-036/038/039,
IntegrationTests-030/031/032 (+033 deferred to live rig),
Client.Dotnet-026/028/029 (+027 won't-fix), Client.Go-030..034,
Client.Python-032..036, Client.Rust-033..038.

Key fix: SessionEventDistributor orphaned a subscriber that registered after
the pump completed but before disposal (Server-056) -> register paths now
complete late registrants under _lifecycleLock; regression test added. The
racy dashboard-mirror gRPC test made deterministic (Tests-039).

Verified green locally: gateway Tests targeted classes (GatewaySession,
SessionEventDistributor, GatewayOptionsValidator, ProtobufContractRoundTrip,
GatewaySessionDashboardMirror) + dotnet/go/python/rust client suites.
This commit is contained in:
Joseph Doherty
2026-06-17 05:23:14 -04:00
parent 25d04ec37e
commit 6b5fe6aa82
37 changed files with 1049 additions and 211 deletions
+10 -5
View File
@@ -1084,12 +1084,19 @@ Resolved for v1:
- MXAccess COM target is `ArchestrA.MxAccess.LMXProxyServerClass` /
`LMXProxy.LMXProxyServer.1` from the installed 32-bit `LmxProxy.dll`.
- One `OpenSession` maps to one worker process; no reconnectable sessions.
- One active event subscriber per session.
- One `OpenSession` maps to one worker process.
- Reconnectable sessions: clients reconnect by re-issuing `StreamEvents` with
`after_worker_sequence`; the gateway replays the retained ring tail and emits
a `ReplayGap` sentinel when events were evicted. See `docs/Sessions.md`.
- Multi-subscriber event fan-out: multiple concurrent `StreamEvents` callers on
the same session are supported; single-subscriber mode uses fail-fast
backpressure, multi-subscriber mode disconnects only the slow consumer. See
`docs/Sessions.md`.
- API key authentication with hashed keys in gateway-owned SQLite.
- Basic Blazor Server dashboard with Bootstrap CSS/JS and real-time updates.
- Workers run as the gateway service identity.
- Event backpressure is fail-fast with bounded queues.
- Event backpressure is fail-fast with bounded queues (single-subscriber) or
per-subscriber disconnect (multi-subscriber).
- No public command batching.
- `OperationComplete` is forwarded only when native MXAccess raises it.
- `OnBufferedDataChange` is modeled now; multi-sample payload conversion remains
@@ -1098,8 +1105,6 @@ Resolved for v1:
Post-v1 revisit items:
- production event-rate target and optional coalescing,
- reconnectable sessions,
- multi-subscriber event fan-out,
- restricted worker process identity,
- command batching for high-volume setup.