Repository navigation
Code-node Content rendering fails: Graph.Views binds CodeOutputCurrency that the loaded MeshWeaver.Mesh.Contract build does not carry #3518
Description
What is failing
The code-node Content layout area fails to render. MeshWeaver.Graph.CodeViews.BuildContent (src/MeshWeaver.Graph.Views/CodeViews.cs, called from the Content area subscription through a Reactive CombineLatest) throws System.TypeLoadException: the MeshWeaver.Mesh.Contract, Version=3.0.0.0 loaded in the process does not contain MeshWeaver.Mesh.CodeOutputCurrency, which the view code references. Every render attempt of an affected node's Content area dies the same way — it is deterministic, not transient.
Probable cause
Cross-build binary skew: the MeshWeaver.Graph.Views copy the pod loaded was compiled against a build of MeshWeaver.Mesh.Contract that carries CodeOutputCurrency, while the MeshWeaver.Mesh.Contract copy the pod loaded does not. Confidence: high on the mechanism (that is what this exception means — assembly found, type absent), unresolved on which of the two copies is the stale side. Evidence pointing that way:
CodeOutputCurrencyreads as the run-fingerprint / "output is current" machinery shipped days ago (A code cell that cannot prove it is current now says so), andBuildContenttakes exactly the arguments such a badge needs. A days-old type is precisely the window in which a pod can hold one assembly from each side of the change.- This deployment has a measured history of exactly this class: the A view-pack fix can merge, build and deploy while the portal keeps loading an older copy of that pack #2223 story (store copies vs image copy of a view pack, resolved by luck of probe order), NodeType compiles in ONE boot resolve DIFFERENT module sets 15s apart — a healthy type becomes failed, and that is the shape the readiness gate refuses forever #3395 (pods of one ReplicaSet running different pinned generations for a day while
/healthsaid Healthy), and Store-installed MeshWeaver.Mcp module cannot construct McpMeshPlugin — it binds a MeshWeaver.AI.MeshOperations type the platform's MeshWeaver.AI does not carry #2370 (module TypeRef broken by a type move). The semver-floor module lane permits a module built against a newer platform to load on an older one — so a newly-landed view-pack generation binding a newly-added contract type fails with exactly this exception and no gate catches it. - A plain in-repo source move is the less likely variant: the type's namespace matches its assembly and the consumer is platform code in the same repo, so the platform's own build would refuse it — unless one of the two assemblies is loaded from a shadowing copy. A 7 public types that left GitSync/Hosting for MeshWeaver.AI CANNOT be forwarded — move back, or republish atomically #2398-style move of the type out of
Mesh.Mesh.Contractwithout a forwarder (a "departure") cannot be fully excluded without reading the repo, but it would fail the type-forwarders gate that now exists for exactly that.
Impact
Low volume so far — a single portal pod on memex-cloud, two occurrences in one burst, first sighting minutes before triage. But where it occurs it is a hard, repeatable break of the code-node Content view for every visitor on that pod, and per #3395 a pod can sit on a stale mixed set indefinitely while passing health checks. This is now the third missing-platform-type incident on this deployment in a week (see related below), so treat it as a build/rollout hygiene signal, not a one-off page.
Where to look
src/MeshWeaver.Mesh.Contract— doesMeshWeaver.Mesh.CodeOutputCurrencyexist on current main, when was it added, and if it moved, is there a forwarder? Cross-checkMovedTypeBinaryContractTest/ the type-forwarders gate for it.src/MeshWeaver.Graph.Views/CodeViews.cs—BuildContent(line 422 per the stack): what bindsCodeOutputCurrency, and should that bind degrade gracefully instead of taking down the whole Content area?- On the affected pod: the boot
[ModuleLoad]report plus/proc/1/maps(the A view-pack fix can merge, build and deploy while the portal keeps loading an older copy of that pack #2223 recipe) — which exact copies ofMeshWeaver.Mesh.Contract.dllandMeshWeaver.Graph.Views.dllloaded, their MVIDs and image-vs-store source, and the pod's image tag vs the rest of the ReplicaSet. That one check distinguishes image/image skew from store-landed-generation skew.
Related, not duplicates
- Store-installed MeshWeaver.Mcp module cannot construct McpMeshPlugin — it binds a MeshWeaver.AI.MeshOperations type the platform's MeshWeaver.AI does not carry #2370 — same exception class (
TypeLoadExceptionon a moved type), but a store-installed plugin consumer; filed and fixed. - Incident 389c8ef06c305b16 —
SidePanelStateServicemissing fromMeshWeaver.Blazoron this same deployment (2026-09-03, two pods); its triage produced no ticket. A human should check whether these share one root cause in the roll/landing path.
Evidence
| Fingerprint | 86e76be082fc424e |
| Category | MeshWeaver.Layout.Composition.LayoutAreaHost |
| Severity | Error |
| Exception | System.TypeLoadException |
| Top frame | MeshWeaver.Graph.CodeViews.BuildContent(LayoutAreaHost host, MeshNode node, ActivityLog lastActivity, Permission permissions, String editorHeight, String viewer) |
| Namespace | memex-cloud |
| Pods | memex-portal-deployment-58c859d4cc-b8pfg |
| Occurrences | 4 |
| First seen | 2026-09-07 03:33:10Z |
| Last seen | 2026-09-07 03:35:18Z |
Recent log lines
2026-09-07 03:33:10Z memex-portal-deployment-58c859d4cc-b8pfg fail: MeshWeaver.Layout.Composition.LayoutAreaHost[0]
Rendering failed for area Content
System.TypeLoadException: Could not load type 'MeshWeaver.Mesh.CodeOutputCurrency' from assembly 'MeshWeaver.Mesh.Contract, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null'.
at MeshWeaver.Graph.CodeViews.BuildContent(LayoutAreaHost host, MeshNode node, ActivityLog lastActivity, Permission permissions, String editorHeight, String viewer)
at MeshWeaver.Graph.CodeViews.<>c__DisplayClass18_0.<Content>b__10(MeshNode node, ActivityLog lastActivity, Permission permissions, String editorHeight) in /repo/src/MeshWeaver.Graph.Views/CodeViews.cs:line 422
at System.Reactive.Linq.ObservableImpl.CombineLatest`5._.GetResult()
at System.Reactive.Linq.ObservableImpl.CombineLatestSink`1.Next(Int32 index)
2026-09-07 03:33:10Z memex-portal-deployment-58c859d4cc-b8pfg fail: MeshWeaver.Layout.Composition.LayoutAreaHost[0]
Rendering failed for area Content
System.TypeLoadException: Could not load type 'MeshWeaver.Mesh.CodeOutputCurrency' from assembly 'MeshWeaver.Mesh.Contract, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null'.
at MeshWeaver.Graph.CodeViews.BuildContent(LayoutAreaHost host, MeshNode node, ActivityLog lastActivity, Permission permissions, String editorHeight, String viewer)
at MeshWeaver.Graph.CodeViews.<>c__DisplayClass18_0.<Content>b__10(MeshNode node, ActivityLog lastActivity, Permission permissions, String editorHeight) in /repo/src/MeshWeaver.Graph.Views/CodeViews.cs:line 422
at System.Reactive.Linq.ObservableImpl.CombineLatest`5._.GetResult()
at System.Reactive.Linq.ObservableImpl.CombineLatestSink`1.Next(Int32 index)
2026-09-07 03:35:18Z memex-portal-deployment-58c859d4cc-b8pfg fail: MeshWeaver.Layout.Composition.LayoutAreaHost[0]
Rendering failed for area Content
System.TypeLoadException: Could not load type 'MeshWeaver.Mesh.CodeOutputCurrency' from assembly 'MeshWeaver.Mesh.Contract, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null'.
at MeshWeaver.Graph.CodeViews.BuildContent(LayoutAreaHost host, MeshNode node, ActivityLog lastActivity, Permission permissions, String editorHeight, String viewer)
at MeshWeaver.Graph.CodeViews.<>c__DisplayClass18_0.<Content>b__10(MeshNode node, ActivityLog lastActivity, Permission permissions, String editorHeight) in /repo/src/MeshWeaver.Graph.Views/CodeViews.cs:line 422
at System.Reactive.Linq.ObservableImpl.CombineLatest`5._.GetResult()
at System.Reactive.Linq.ObservableImpl.CombineLatestSink`1.Next(Int32 index)
2026-09-07 03:35:18Z memex-portal-deployment-58c859d4cc-b8pfg fail: MeshWeaver.Layout.Composition.LayoutAreaHost[0]
Rendering failed for area Content
System.TypeLoadException: Could not load type 'MeshWeaver.Mesh.CodeOutputCurrency' from assembly 'MeshWeaver.Mesh.Contract, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null'.
at MeshWeaver.Graph.CodeViews.BuildContent(LayoutAreaHost host, MeshNode node, ActivityLog lastActivity, Permission permissions, String editorHeight, String viewer)
at MeshWeaver.Graph.CodeViews.<>c__DisplayClass18_0.<Content>b__10(MeshNode node, ActivityLog lastActivity, Permission permissions, String editorHeight) in /repo/src/MeshWeaver.Graph.Views/CodeViews.cs:line 422
at System.Reactive.Linq.ObservableImpl.CombineLatest`5._.GetResult()
at System.Reactive.Linq.ObservableImpl.CombineLatestSink`1.Next(Int32 index)
Opened automatically from Admin/_LogIncident/86e76be082fc424e. Recurrences are folded into this issue rather than opening new ones.
Activity
rbuergi commentedon Sep 7, 2026
Question 1 answered — and it eliminates the departure hypothesis entirely
Measured on
origin/main:src/MeshWeaver.Mesh.Contract/CodeOutputCurrency.cs(the enum at:15,CodeOutputCurrencyExtensionsat:60)2dc5868b2("a code cell that cannot prove it is current no longer claims to be", #3249), refined bye291c8abeandaea4e9e46🚨 So the
#2398-style departure-without-a-forwarder variant is excluded, and so is any in-repo move. The type-forwarders gate has nothing to catch here because nothing left. Question 1 is closed.And it is present in every sealed set, checked by path against each:
What that leaves — and it is the night's recurring root, not a new one
The type is in the repo and in every candidate set, so the stale side is the copy the pod loaded: a
MeshWeaver.Mesh.Contract.dllpredating 2026-09-04, under aMeshWeaver.Graph.Viewsthat binds a type added on it. That is your hypothesis 2 (store-landed generation vs image copy), not hypothesis 1.It is also the same shape as tonight's Store outage on both portals (Plugins#1430): content that moved ahead of the framework the instance is actually running. There, package sources were synced from Plugins main's HEAD into portals running
s2f22764and fourStore/*types went to compileErroron named symbols their running core did not have. Here it is a view pack rather than node source, and the failure is aTypeLoadExceptionat render rather than a compile error — but the sentence is identical: the thing that landed is newer than the framework loaded under it.🚨 #3509 (merged tonight, #3472) does NOT cover this, and it is worth being explicit so nobody assumes it does. That guard is about NodeType assemblies keyed to a framework identity — it refuses a bake whose identity is not the process's own, and adds
CompilationStatus.Foreignso a foreign record stops reportingOk. A module/view-pack assembly bound by the semver floor is a different lane: the floor deliberately permits a module built against a newer platform to load on an older one, which is exactly the permission being exercised here. Related by root cause, not covered by the fix.The one check that still discriminates
Your item 3 is the right one and is the only remaining question: on the affected pod, the boot
[ModuleLoad]report plus/proc/1/maps(the #2223 recipe) — which exact copies ofMeshWeaver.Mesh.Contract.dllandMeshWeaver.Graph.Views.dllloaded, their MVIDs, image-vs-store provenance, and the pod's image tag against the rest of the ReplicaSet. That needs cluster access; I have none and did not attempt it.🚨 A correction to my own first answer, recorded because it nearly went out wrong
My first pass reported "none of the four sealed sets carry it" — a false negative, and on a production issue it would have sent someone hunting a phantom regression. Cause: zsh applied a history modifier to the rev-spec.
"$s:src/..."begins:s, which zsh reads as the substitute modifier, so git received a mangled rev-spec and answered "not found" about a file that exists. Writing the path through a second variable ("$s:$p") avoids it.Absence of a match is not absence of the subject — which is the thing this whole class of issue keeps being about, including in the tooling used to investigate it.
rbuergi commentedon Sep 7, 2026
Closing as FIXED — same root cause as #3538, confirmed before closing rather than filed as a duplicate
Verified 2026-09-07T12:25Z against
origin/main(fbf9e9be1). The merge queue does not fireCloseslinks, so this is measurement.Merged: #3552, merge commit
3ab9dbdcd.Why this is the same defect, not merely a similar one
Three identities, not a resemblance:
MeshWeaver.Mesh.CodeOutputCurrencyMeshWeaver.Graph.Views(CodeViews.BuildContent)memex-cloud, 2026-09-07 03:33–03:35Zmemex-cloud, ~06:00Z, coree36f04c71(09-03)minMeshVersionfloorminMeshVersion: 3.0.0-rc8, satisfied by3.0.0-rc9.ci.7693The comment above already eliminated the two competing hypotheses by measurement:
CodeOutputCurrencywas added on 2026-09-04 (2dc5868b2), never moved and never deleted, and ispresent in all four sealed sets — so the departure/forwarder variant is excluded and the stale side
is the copy the pod loaded. That is the semver-floor lane permitting a module built against a newer
platform to load on an older one, which is exactly #3538's sentence.
Why closing it as fixed (not as a duplicate) is the right call
The fix removes the render-end symptom at its cause:
ModuleLandingService.LandCorenow refuses anunlinkable module from memory, before a byte touches disk
(
src/MeshWeaver.PluginCatalog/ModuleLandingService.cs:623-624), andMeshBuilder.InstallAssembliesrefuses it before
Assembly.LoadFrom(src/MeshWeaver.Mesh.Contract/MeshBuilder.cs:206). AGraph.Viewsbinding a type its runningMeshWeaver.Mesh.Contractlacks can no longer be adopted,so
BuildContentcan no longer reach theTypeLoadException.ModulePlatformLinkTestcompiles thatprecise shape with Roslyn — same assembly simple name, missing type — and drives the real landing.
One item deliberately NOT carried forward
The issue's investigation step 3 — reading the affected pod's
[ModuleLoad]report and/proc/1/mapsfor MVIDs and image-vs-store provenance — was never performed and no longerdiscriminates anything: #3538 established the provenance from the repo side, and the symptom cleared
on memex-cloud at 07:12Z when the platform was rolled to
3.0.0-ci.7981. Re-running it now wouldmeasure a healthy pod.
Measured 2026-09-07T12:25Z on
origin/mainfbf9e9be1withgit log --merges --grep,git show --stat 3ab9dbdcd, andgrep -rnfor the probe's call sites.systemorph-com commentedon Sep 17, 2026
Reopened — this fault is happening again.
Still occurring: 33 more since the last update (37 total).
memex-portal-deployment-58c859d4cc-b8pfg,memex-portal-deployment-58c859d4cc-gqqg7Recent log lines
rbuergi commentedon Sep 17, 2026
Re-closed — the reopen above was on stale evidence (#4577).
The recurrence bot reopened this at
2026-09-17T07:51:47Zunder the headline "this fault is happening again", but the occurrence its own comment cites is OLDER than the close it reverted:Last seen:2026-09-07 07:14:44Z2026-09-07T12:31:55ZSo the counter moved, not the clock — the fault's newest occurrence predates the close, which is the one thing "still happening" has to mean. Root cause and fix:
LogIncidentFiler.Reopenreopened on the sole condition that the issue was closed, while the comment-debt clock pays a final count for incidents whose fault has stopped (the fix, Systemorph/MeshWeaver.Plugins#2014, is written but NOT yet merged — it makes a reopen requireincident.LastSeen > issue.ClosedAt).This restores the close exactly as it stood; nothing is asserted about the defect itself. If the fault happens again, the next occurrence postdates this close and reopens the issue on evidence that means what it says.
One of 53 issues whose reopen was measured stale (129 bot reopens on 2026-09-17, 125 of them inside the 07:51-07:53Z sweep; 76 postdate their close and were left open). Measured and re-closed 2026-09-17 by Claude Opus 5.
rbuergi commentedon Sep 17, 2026
Adding what the stale-reopen re-close deliberately did not assert: the defect itself is fixed, and the fix is in the image both portals are running.
main:MeshWeaver.Mesh.CodeOutputCurrencyatsrc/MeshWeaver.Mesh.Contract/CodeOutputCurrency.cs(enum +CodeOutputCurrencyExtensions), read onorigin/main=0ec37cf2today. TheTypeLoadExceptionwas cross-build skew, not a removed member.3ab9dbdcd880.compare 3ab9dbdcd880...c84c6c05…(the imagememex.meshweaver.cloudserves, re-read today via/api/version) →behind_by = 0; same forafde4eab…onmemex.systemorph.com.And the reopen's own
Last seen: 2026-09-07 07:14:44Zis 85 minutes before that fix merged and 5 h 17 m before the close it reverted — so it is evidence from before the fix, not evidence against it.