Skip to content

fix(approvals): restore the legacy MeshWeaver.Graph surface — the ci.3961 bake regression - #1683

Merged
rbuergi merged 2 commits into
mainfrom
fix/approvals-legacy-surface
Aug 16, 2026
Merged

rbuergi merged 2 commits into
mainfrom
fix/approvals-legacy-surface

Conversation

@rbuergi

@rbuergi rbuergi commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

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 exist
  • 8 more UpstreamFailed cascades

DynamicTypePreWarmer correctly 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 ApprovalExtensions from the MeshWeaver.Graph namespace to MeshWeaver.Approvals and narrowed the public entry to MeshBuilder, making the hub-level half internal 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; AddApprovals is the very symbol of the #683-era outage). Content lives in other repos and production databases, so the platform keeps the surface.

Fix

GraphLegacySurface.cs in the Approvals assembly, deliberately declaring namespace MeshWeaver.Graph: the class, ApprovalPartition, and AddApprovals(this MessageHubConfiguration) — idempotent via the ApprovalsEnabled marker and delegating to the module's ConfigureHub, so a hub the module already configured is returned unchanged. HasApprovals stays on ApprovalsMarkerExtensions (re-declaring it is CS0121).

Verification

The pin test (ApprovalsLegacySurfaceCompileTest) compiles a NodeType whose Source uses the exact prod caller shape:

  • RED without the shim — reproduced the prod failure locally (Failed: 1)
  • GREEN with it (Passed: 1)

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

…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>
Copilot AI lite review requested due to automatic review settings August 16, 2026 16:40

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

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 (including ApprovalPartition and AddApprovals(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.

@github-actions

github-actions Bot commented Aug 16, 2026 •

Copy link
Copy Markdown
Contributor

Test Results

    65 files      65 suites   46m 37s ⏱️
10 691 tests 10 385 ✅ 306 💤 0 ❌
11 059 runs  10 753 ✅ 306 💤 0 ❌

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>
@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 0)

919 tests   918 ✅  12m 2s ⏱️
 10 suites    1 💤
 10 files      0 ❌

Results for commit f0a0ff5.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 5)

1 371 tests   1 370 ✅  6m 14s ⏱️
   11 suites      1 💤
   11 files        0 ❌

Results for commit f0a0ff5.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 4)

1 604 tests   1 598 ✅  7m 26s ⏱️
   11 suites      6 💤
   11 files        0 ❌

Results for commit f0a0ff5.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 3)

   11 files     11 suites   6m 10s ⏱️
2 197 tests 2 006 ✅ 191 💤 0 ❌
2 565 runs  2 374 ✅ 191 💤 0 ❌

Results for commit f0a0ff5.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 1)

2 164 tests   2 061 ✅  7m 23s ⏱️
   11 suites    103 💤
   11 files        0 ❌

Results for commit f0a0ff5.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results (shard 2)

2 436 tests   2 432 ✅  7m 17s ⏱️
   11 suites      4 💤
   11 files        0 ❌

Results for commit f0a0ff5.

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