Add gateway implementation planning docs

This commit is contained in:
Joseph Doherty
2026-04-26 15:19:17 -04:00
parent 1d8a6fe3db
commit 81339633d9
25 changed files with 6069 additions and 11 deletions
+55 -10
View File
@@ -40,6 +40,37 @@ The worker does not host gRPC. The gateway talks to workers through a small
local IPC protocol. Named pipes with protobuf-framed messages are the default
transport.
Detailed follow-up docs:
- `docs/gateway-process-design.md` covers the .NET 10 gateway process,
session manager, worker supervision, gRPC API, event streaming, fault model,
security, observability, and test strategy.
- `docs/mxaccess-worker-instance-design.md` covers each .NET Framework 4.8 x86
MXAccess worker instance, including STA ownership, message pumping, COM
lifetime, command dispatch, event sinks, conversion, and shutdown.
- `docs/design-decisions.md` records current v1 choices, including API-key
authentication in gateway-owned SQLite and the concrete installed MXAccess
COM class details from `C:\Users\dohertj2\Desktop\mxaccess`.
- `docs/gateway-dashboard-design.md` covers the Blazor Server and Bootstrap
dashboard for live gateway/session/worker status.
- `docs/client-libraries-design.md` covers shared design requirements for
official gRPC client libraries, test CLIs, and tests for .NET C#, Go, Rust,
Python, and Java.
- `docs/implementation-plan-index.md` links the detailed implementation plans
and recommended Gitea milestones/issues.
Implementation style guides:
- `StyleGuide.md` covers project documentation.
- `docs/style-guides/CSharpStyleGuide.md` covers gateway, worker, .NET client,
and C# tests.
- `docs/style-guides/ProtobufStyleGuide.md` covers public gRPC and worker IPC
contracts.
- `docs/style-guides/GoStyleGuide.md` covers the Go client.
- `docs/style-guides/RustStyleGuide.md` covers the Rust client.
- `docs/style-guides/PythonStyleGuide.md` covers the Python client.
- `docs/style-guides/JavaStyleGuide.md` covers the Java client.
## Process Split
### Gateway Process
@@ -866,16 +897,30 @@ backend = mxaccess-worker
## Open Questions
- Exact installed MXAccess COM ProgID/class used by production should be pinned
from the existing trace harness.
- Whether one gRPC client connection maps to one session or whether sessions can
survive client reconnects.
- Whether event streams can have multiple subscribers per session.
- Required authentication model for remote clients.
- Whether worker process identity should be the gateway identity or a restricted
service account.
- Maximum supported event rate before coalescing is required.
- Whether command batching is needed for high-volume tag registration.
Current v1 decisions are recorded in `docs/design-decisions.md`.
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.
- 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.
- No public command batching.
- `OperationComplete` is forwarded only when native MXAccess raises it.
- `OnBufferedDataChange` is modeled now; multi-sample payload conversion remains
capture-validated work.
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.
## Recommended Next Step