Repository navigation
fix(approvals): restore the legacy MeshWeaver.Graph surface — the ci.3961 bake regression - #1683
Conversation
…Types regressed on the extraction image The Approvals extraction (#1654) moved ApprovalExtensions from the MeshWeaver.Graph namespace to MeshWeaver.Approvals and narrowed the public entry point to MeshBuilder. In-mesh sources in the SocialMedia and UWDeepfield partitions compile against the OLD shape — "using MeshWeaver.Graph;" + AddApprovals(this MessageHubConfiguration) + the class short name — and the compiler cannot see those callers (AGENTS.md: in-mesh source is invisible to dotnet build; AddApprovals is the same symbol that caused the #683-era outage). On ci.3961, the first image shipping the extraction, the bake regressed 11 NodeTypes (CS1061 AddApprovals on SocialMedia/Post, CS0103 ApprovalExtensions on UWDeepfield/UWDeepfieldHome + TreatySubmission, 8 UpstreamFailed cascades) and DynamicTypePreWarmer correctly refused readiness on memex and memex-cloud — old pods kept serving, the rollout stalled. GraphLegacySurface.cs (in the Approvals assembly, deliberately declaring the MeshWeaver.Graph namespace) restores the class, the ApprovalPartition const, and AddApprovals(this MessageHubConfiguration) — idempotent via the ApprovalsEnabled marker, delegating to the module's ConfigureHub, so a hub the module already configured is returned unchanged. HasApprovals stays where it lives today (ApprovalsMarkerExtensions) — re-declaring it is CS0121. The pin test compiles a NodeType whose Source uses the exact caller shape and was proven RED without the shim (the prod failure reproduced) and GREEN with it. It is the compiler for the in-mesh callers from here on. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Restores the legacy MeshWeaver.Graph-namespace Approvals API surface that in-mesh NodeType sources compile against, addressing the ci.3961 bake regression caused by the Approvals extraction (moved/narrowed public entry points).
Changes:
- Reintroduces
MeshWeaver.Graph.ApprovalExtensions(includingApprovalPartitionandAddApprovals(this MessageHubConfiguration)) as a shim that delegates to the Approvals module registration and is idempotent via the existing marker. - Adds an integration-style compile pin test that compiles a NodeType Source using the exact legacy caller shape.
- Adds a “What’s New” entry documenting the user-visible fix.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| test/MeshWeaver.Hosting.Monolith.Test/ApprovalsLegacySurfaceCompileTest.cs | Adds a compile pin ensuring legacy in-mesh using MeshWeaver.Graph; + configuration.AddApprovals() remains compilable. |
| src/MeshWeaver.Documentation/Data/WhatsNew/2026-08-16-approvals-legacy-surface.md | Documents the regression fix in What’s New (Category: Fix). |
| src/MeshWeaver.Approvals/GraphLegacySurface.cs | Implements the legacy MeshWeaver.Graph.ApprovalExtensions shim delegating to the module’s hub configuration and guarding via ApprovalsEnabled. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Test Results 65 files 65 suites 46m 37s ⏱️ Results for commit f0a0ff5. ♻️ This comment has been updated with latest results. |
…cy class shadows it from the enclosing namespace Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Test Results (shard 0)919 tests 918 ✅ 12m 2s ⏱️ Results for commit f0a0ff5. |
Test Results (shard 5)1 371 tests 1 370 ✅ 6m 14s ⏱️ Results for commit f0a0ff5. |
Test Results (shard 4)1 604 tests 1 598 ✅ 7m 26s ⏱️ Results for commit f0a0ff5. |
Test Results (shard 3) 11 files 11 suites 6m 10s ⏱️ Results for commit f0a0ff5. |
Test Results (shard 1)2 164 tests 2 061 ✅ 7m 23s ⏱️ Results for commit f0a0ff5. |
Test Results (shard 2)2 436 tests 2 432 ✅ 7m 17s ⏱️ Results for commit f0a0ff5. |
The regression
ci.3961(the first image shipping the #1654 Approvals extraction) regressed 11 NodeTypes across the SocialMedia and UWDeepfield partitions:SocialMedia/Post: CS1061 —'MessageHubConfiguration' does not contain a definition for 'AddApprovals'UWDeepfield/UWDeepfieldHome+TreatySubmission: CS0103 —'ApprovalExtensions' does not existUpstreamFailedcascadesDynamicTypePreWarmercorrectly refused readiness on memex and memex-cloud — old pods kept serving, the rollout stalled. The gate did its job; the platform broke its surface contract.Root cause
#1654 moved
ApprovalExtensionsfrom theMeshWeaver.Graphnamespace toMeshWeaver.Approvalsand narrowed the public entry toMeshBuilder, making the hub-level halfinternal ConfigureHub. In-mesh sources compile against the old shape (using MeshWeaver.Graph;+configuration.AddApprovals()+ the class short name) — callers the compiler cannot see (AGENTS.md: in-mesh source is invisible to dotnet build;AddApprovalsis the very symbol of the #683-era outage). Content lives in other repos and production databases, so the platform keeps the surface.Fix
GraphLegacySurface.csin the Approvals assembly, deliberately declaringnamespace MeshWeaver.Graph: the class,ApprovalPartition, andAddApprovals(this MessageHubConfiguration)— idempotent via theApprovalsEnabledmarker and delegating to the module'sConfigureHub, so a hub the module already configured is returned unchanged.HasApprovalsstays onApprovalsMarkerExtensions(re-declaring it is CS0121).Verification
The pin test (
ApprovalsLegacySurfaceCompileTest) compiles a NodeType whose Source uses the exact prod caller shape:It is the compiler for those in-mesh callers from here on. What's New entry included (the held-back update is user-visible).
🤖 Generated with Claude Code