Skip to content

Memex.Portal.Shared stops composing Postgres, gRPC, SignalR and InstanceSync; mesh.proto moves to Mesh.Contract - #2479

Merged
rbuergi merged 2 commits into
mainfrom
feat/storage-leaves-core
Aug 27, 2026
Merged

rbuergi merged 2 commits into
mainfrom
feat/storage-leaves-core

Conversation

@rbuergi

@rbuergi rbuergi commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

What

Step 1 (core side) of the storage / transport / sync carve-out — the projects leaving core are MeshWeaver.Hosting.{PostgreSql,Sqlite,Cosmos,Snowflake,Grpc,SignalR}, MeshWeaver.Connection.SignalR, MeshWeaver.InstanceSync, Memex.Database.Migration, Memex.LocalMesh and the PostgreSqlImport tool; they move to MeshWeaver.Plugins where the hosts already live.

  • Memex.Portal.Shared drops its ProjectReferences to Hosting.PostgreSql, Hosting.Grpc, Hosting.SignalR and InstanceSync. The first two were ships-the-bits only (zero symbol uses); the InstanceSync + SignalR mesh registrations and the /connect/instance endpoints now live in the portal composition in MeshWeaver.Plugins (Plugins#737 — merge that first; this PR must land after it).
  • mesh.proto becomes the platform contract: canonical copy in MeshWeaver.Mesh.Contract/Protos (packed), Hosting.Grpc compiles from there, clients/python + clients.yml read it from there. A byte-identical transition copy stays at the old path (with a header note) until the Plugins-side JS clients resolve the new path; it is deleted with the project.

Verification

  • Hosting.Grpc, Memex.Portal.Shared, Memex.Portal.Shared.Test, Hosting.Monolith.Test build -c Release -p:CIRun=true -warnaserror (0 errors).
  • Memex.Portal.Shared.Test: 371/371 passed.
  • The three plugins hosts (Memex.Portal.Gui/Distributed/Monolith at Plugins#737) build against this branch (0 errors).

No What's New entry: no user-visible change.

🤖 Generated with Claude Code

https://claude.ai/code/session_01X8RtDNQGywnbbY2T5j5T28

…nceSync; mesh.proto moves to Mesh.Contract

The storage/transport/sync carve-out, step 1 of the core side. No code in Memex.Portal.Shared
named a MeshWeaver.Hosting.PostgreSql or .Hosting.Grpc type — both references were
ships-the-bits only — and the InstanceSync + SignalR mesh registrations plus the
/connect/instance endpoints now live in the portal composition in MeshWeaver.Plugins
(Plugins#737), where the hosts are. So the four ProjectReferences, the two registrations
and the endpoint file go; the projects themselves follow into that repo next.

The gRPC wire contract (meshweaver.v1.Mesh) is the platform's, not the server's: mesh.proto
now lives in MeshWeaver.Mesh.Contract/Protos and is packed with it; Hosting.Grpc compiles
from there, the python client and the clients workflow read it from there. The old path keeps a
byte-identical transition copy (header note) until the JS clients in MeshWeaver.Plugins resolve
the new one; it is deleted with the Hosting.Grpc project.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X8RtDNQGywnbbY2T5j5T28
Copilot AI lite review requested due to automatic review settings August 27, 2026 07:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is the core-side step of the storage/transport/sync carve-out by removing Memex.Portal.Shared’s direct composition of Postgres/gRPC/SignalR/InstanceSync, and by relocating the canonical gRPC wire contract (mesh.proto) into MeshWeaver.Mesh.Contract so all SDKs and hosts generate from one source of truth.

Changes:

  • Move the canonical mesh.proto to src/MeshWeaver.Mesh.Contract/Protos and update packaging + client generation paths to reference it.
  • Update MeshWeaver.Hosting.Grpc to compile stubs from the contract proto via a linked include.
  • Remove InstanceSync/SignalR endpoint wiring and project references from Memex.Portal.Shared (with composition expected to live in MeshWeaver.Plugins per the PR description).

Reviewed changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/MeshWeaver.Mesh.Contract/Protos/mesh.proto Adds the canonical gRPC framing contract for mesh participant connections.
src/MeshWeaver.Mesh.Contract/MeshWeaver.Mesh.Contract.csproj Packs mesh.proto into the Mesh.Contract NuGet so downstream generators can consume it.
src/MeshWeaver.Hosting.Grpc/Protos/mesh.proto Keeps a transition copy with an explicit header pointing to the canonical location.
src/MeshWeaver.Hosting.Grpc/MeshWeaver.Hosting.Grpc.csproj Switches protobuf compilation to the canonical contract proto via Include=../MeshWeaver.Mesh.Contract/... + Link.
memex/Memex.Portal.Shared/Social/InstanceConnectEndpoints.cs Removes the instance-connect OAuth endpoints from Memex.Portal.Shared (composition moved elsewhere).
memex/Memex.Portal.Shared/MemexConfiguration.cs Drops InstanceSync/SignalR composition calls and updates related commentary.
memex/Memex.Portal.Shared/Memex.Portal.Shared.csproj Removes ProjectReferences to Hosting.PostgreSql/Grpc/SignalR and InstanceSync to support the carve-out.
clients/python/scripts/gen_proto.sh Updates Python stub generation to use the canonical contract proto path.
clients/python/README.md Updates the documented proto generation path (and should align wording with the new ownership).
.github/workflows/clients.yml Updates the client CI triggers/comments to watch the new canonical proto path.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread clients/python/README.md Resolved
…TestBase

OrleansTestBase, the test cluster + backing store, the disposal drain, the shutdown-race
suppressor, grain-directory sizing, the shared fixture and the test seed/identity helpers
move out of the Orleans test project into a shipped project — the Orleans counterpart of
MeshWeaver.Hosting.Monolith.TestBase. The storage (PostgreSql, Cosmos, Snowflake) and
transport (gRPC) suites that run over an Orleans cluster are leaving for MeshWeaver.Plugins
with their projects, and a test project in another repository can build on a src project
but not on a test project. The namespace stays MeshWeaver.Hosting.Orleans.Test on purpose:
the machinery moved, not its identity, and no test file changed a using.

The xunit collection DEFINITION stays in the test assembly (xunit resolves [Collection]
against the declaring assembly); TestClusterSizingGuard scans both homes so the cluster
builder itself stays guarded; Microsoft.Orleans.TestingHost is pinned in the root package
list because a src project ships it.

Also the three review nits: the Instance Sync comment and the python README now name
where the composition / the proto live.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X8RtDNQGywnbbY2T5j5T28
@rbuergi

rbuergi commented Aug 27, 2026

Copy link
Copy Markdown
Contributor Author

Second commit e150fa3: promotes the Orleans test machinery to src/MeshWeaver.Hosting.Orleans.TestBase (the Monolith.TestBase precedent) so the Orleans-over-Postgres and Orleans-over-gRPC suites can follow their projects to MeshWeaver.Plugins; both guards + OrleansMeshTest green on the promoted machinery (7/7). Review nits addressed.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 4)

   10 files  ±0     10 suites  ±0   8m 26s ⏱️ +26s
2 399 tests ±0  2 397 ✅ ±0  2 💤 ±0  0 ❌ ±0 
2 400 runs  ±0  2 398 ✅ ±0  2 💤 ±0  0 ❌ ±0 

Results for commit e150fa3. ± Comparison against base commit 6600d35.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 5)

4 482 tests  ±0   4 376 ✅ ±0   11m 52s ⏱️ -11s
    9 suites ±0     106 💤 ±0 
    9 files   ±0       0 ❌ ±0 

Results for commit e150fa3. ± Comparison against base commit 6600d35.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 1)

    8 files  ±0      8 suites  ±0   7m 35s ⏱️ -7s
1 092 tests ±0    900 ✅ ±0  192 💤 ±0  0 ❌ ±0 
1 685 runs  ±0  1 493 ✅ ±0  192 💤 ±0  0 ❌ ±0 

Results for commit e150fa3. ± Comparison against base commit 6600d35.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 2)

1 483 tests  ±0   1 483 ✅ ±0   6m 45s ⏱️ -15s
    8 suites ±0       0 💤 ±0 
    8 files   ±0       0 ❌ ±0 

Results for commit e150fa3. ± Comparison against base commit 6600d35.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 0)

959 tests  ±0   959 ✅ ±0   6m 28s ⏱️ +4s
  8 suites ±0     0 💤 ±0 
  8 files   ±0     0 ❌ ±0 

Results for commit e150fa3. ± Comparison against base commit 6600d35.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 3)

999 tests  ±0   995 ✅ ±0   22m 27s ⏱️ + 4m 9s
  9 suites ±0     4 💤 ±0 
  9 files   ±0     0 ❌ ±0 

Results for commit e150fa3. ± Comparison against base commit 6600d35.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results

    52 files  ±0      52 suites  ±0   1h 3m 36s ⏱️ + 4m 6s
11 412 tests ±0  11 108 ✅ ±0  304 💤 ±0  0 ❌ ±0 
12 008 runs  ±0  11 704 ✅ ±0  304 💤 ±0  0 ❌ ±0 

Results for commit e150fa3. ± Comparison against base commit 6600d35.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants