Repository navigation
MeshOperations.TryResolveUnifiedPath issues node reads from the router hub (GetDataRequest posted with mesh/{id} as sender) #4616
Description
What is failing
MeshWeaver.AI.MeshOperations issues a one-shot node READ (GetDataRequest) from the DI-injected root IMessageHub — which in the mesh's root container IS the router — during unified-path resolution. The delivery leaves with mesh/{id} as sender, so work-routing traffic is posted by the router itself. This is the ROUTER_TRAFFIC ORIGIN detector doing its job: the same class of defect as the 2026-06-11 prod wedge, where node work on the router's action block starved real routing traffic.
Probable cause (high confidence)
This is a known, documented residue, not a new defect. MeshOperations' hub field was proven to be the router in production (#4463, RecycleCore posting DisposeRequest). #4477 hopped only that one line, leaving sibling exchanges on the identical field posting as mesh/{id} — the architecture doc (Doc/Architecture/RouterTrafficDetection) names three content-collection reads, the UCR read and the script dispatch as still un-hopped. The sample's call site — MeshOperations.TryResolveUnifiedPath (MeshOperations.cs:1255), an Rx Observe subscription with Timeout/Catch wrappers — is one of those sibling reads: a one-shot node read issued directly off the router hub. Neither ratchet guard sees it: GetDataRequest is not a lifecycle message, and the receiver-keyed guard only covers files that have already hopped something.
Impact
Low volume so far (single occurrence, one pod, once-per-role+type dedup makes the origin site self-limiting to ~2 lines/process). The functional risk is the documented wedge: a read executing on the router's action block competes with routing; a burst of these starves SubscribeRequest traffic. Related production precedent: 2026-06-11 portal wedge.
Where to look / fix
MeshWeaver.AI.MeshOperations.TryResolveUnifiedPath (MeshOperations.cs:1255) — hop the read onto hub.ReadIssuingHub() (MeshExtensions, resolves to portal/reads-{meshId}), which is the identity function for every non-router hub. Reference shape: MeshService (hops both IssuingHub + NodeOperationTarget). While there, sweep the remaining sibling exchanges on the same field named in the doc. Background and the ratchet design that should be extended to cover this class: Router Traffic Detection (mesh: Doc/Architecture/RouterTrafficDetection).
Possibly a duplicate of the #4463/#4477/#1140 family — same component, same proven-router field, different call site. If a tracking issue exists for the remaining MeshOperations sibling exchanges, this can be folded into it.
Evidence
| Fingerprint | 0ab99a8a5e31aa8c |
| Category | MeshWeaver.Messaging.MessageHub |
| Severity | Error |
| Top frame | MeshWeaver.Messaging.MessageHubExtensions.Observe (MessageHubExtensions.cs:118) |
| Namespace | memex |
| Pods | memex-portal-deployment-6c967c7c4c-kdff5 |
| Occurrences | 1 |
| First seen | 2026-09-17 12:59:25Z |
| Last seen | 2026-09-17 12:59:25Z |
Recent log lines
2026-09-17 12:59:25Z memex-portal-deployment-6c967c7c4c-kdff5 fail: MeshWeaver.Messaging.MessageHub[0]
ROUTER_TRAFFIC ORIGIN: GetDataRequest was POSTED with the mesh hub as sender (sender: mesh/q8f5WSUeqE61FTik9UiCSg, target: ClientB/ThomasMueller/_Thread/please-add-thomas-muellers-phone-nnumber-6d5a/97c5742d). The mesh hub is the ROUTER and must not be an end of a work delivery — hop off it with MeshExtensions.NodeOperationIssuingHub() (writes) or MeshExtensions.ReadIssuingHub() (reads) before posting. Reported once per role+type for this hub. Call site:
at MeshWeaver.Messaging.MessageHubExtensions.Observe (MessageHubExtensions.cs:118)
at MeshWeaver.AI.MeshOperations+<>c__DisplayClass31_0.<TryResolveUnifiedPath>b__0 (MeshOperations.cs:1255)
at System.Reactive.Linq.QueryLanguage+CreateWithActionDisposable`1.SubscribeCore
at System.Reactive.ObservableBase`1.Subscribe
at System.Reactive.Linq.ObservableImpl.Timeout`1+Relative+_.Run
at System.Reactive.Producer`2.SubscribeRaw
at System.Reactive.Linq.ObservableImpl.Catch`2.Run
at System.Reactive.Producer`2.SubscribeRaw
at System.Reactive.Sink`2.Run
at System.Reactive.Producer`2.SubscribeRaw
at System.Reactive.Linq.ObservableImpl.Catch`2.Run
at System.Reactive.Producer`2.SubscribeRaw
Opened automatically from Admin/_LogIncident/0ab99a8a5e31aa8c. Recurrences are folded into this issue rather than opening new ones.
Activity
rbuergi commentedon Sep 17, 2026
Already fixed on
main— this sighting is from an image that predates the fix.The UCR read was hopped onto
ReadIssuingHub()by #4487 (bb4ec4038d, "issue the agent surface'sreads and the editor's write off the router", merged 2026-09-16), whose body names it explicitly:
"
MeshOperations: the UCR read, three content-collection reads and the script dispatch →ReadIssuingHub()". OnmaintodayTryResolveUnifiedPathreads— with the self-address exclusion the review round added, so a UCR that resolves back to this very
hub stays local instead of turning into a routed request the router has to execute.
Why it still fired on 2026-09-17 12:59:25Z. Neither portal is running an image that contains
it (measured just now against
/api/version, ancestry checked withgit merge-base --is-ancestor):bb4ec4038d(#4487)?afde4eabe0740ff658f3dae8a3073c33a2b3ea02c84c6c05503228860df03c4a8b596e497e6d218cSo there is nothing to change in code. Closing; the recurrence bot will stop filing it once the
portals roll onto a current image.
The three siblings from the same burst are NOT in this category — #4614 / #4615 / #4617 are one
live defect (the router as a stream SUBSCRIBER) and are being fixed; see that PR for why
ReadIssuingHub()is the wrong remedy there.rbuergi commentedon Sep 17, 2026
🚩 Expect this to recur until the portals roll, and read those recurrences as delivery lag rather than as a regression. The fix (#4487,
bb4ec4038d) is merged, but memex.systemorph.com runsafde4ea(2026-09-15 21:50Z) and memex.meshweaver.cloud runsc84c6c0(2026-09-12 09:30Z) — neither contains it. Every occurrence reported from those images is pre-fix code doing what it did before. Staying closed is deliberate: the code question is answered, and the outstanding item is operational, not a defect to track here.rbuergi commentedon Sep 24, 2026
Duplicate of #5620 — same log site
MeshWeaver.Messaging.MessageHub: ROUTER_TRAFFIC[ ORIGIN]: {type} … with the mesh hub as sender/target; consolidated.Read before closing: This issue's own call site (MeshOperations.TryResolveUnifiedPath:1255) was fixed by #4487 (bb4ec40) and has not appeared since 2026-09-17. The 2026-09-23 reopen is a DIFFERENT call site — MessageHubExtensions.Observe ← ContentIndexingObserver.RegisterCollection (ContentIndexingObserver.cs:179) ← IndexFileActivity ← ContentIndexingActivity.Run — at 20:56:19Z on 76cf776847-9p7z4, i.e. the exchange #5620 reports.
The fix, verification and any recurrence are tracked on #5620.
rbuergi commentedon Sep 24, 2026
The 2026-09-23 20:56:19Z recurrence folded here is a DIFFERENT call site (
ContentIndexingObserver.RegisterCollection, MeshWeaver.Plugins), notTryResolveUnifiedPath— tracked and fixed on #5620 (Refs Systemorph/MeshWeaver.Plugins#2355, merged).rbuergi commentedon Oct 11, 2026
(re-posted 2026-10-11; originally by
systemorph-com[bot]on 2026-09-23)Reopened — this fault is happening again.
Still occurring: 1 more since the last update (2 total).
memex-portal-deployment-76cf776847-9p7z4,memex-portal-deployment-6c967c7c4c-kdff5Recent log lines
Re-addressed by the current identity function: this incident inherited
0ab99a8a5e31aa8c(Systemorph/MeshWeaver.Plugins#1796). Those nodes are superseded and will not fold, file or comment again.