Skip to content

ThreadChatView fails to load a chat thread whose hub recycled through four owner activations without settling #6713

Closed as not planned

Description

@systemorph-com

Observed

The portal chat view ThreadChatView failed to load a chat thread: the view's synchronization stream JM0MLo7Q7kKDuzO1tj1PBw raised SyncStreamOwnerRefusedException through the view's load path (Loading '/data/"thread"' in area 'Thread/1'), giving up on its owner — the thread hub at PartnerRe/Esl/_Thread/can-we-record-a-couple-of-contacts-in-th-b8c357654b3e5687b21a — after 4 DISTINCT owner activations refused the stream against a budget of 3. The exception states the owner address was recycling in a loop, each successor activation dying before it could answer the stream handoff, and that the stream was ended deliberately so its readers can re-read.

The owner thread node itself is healthy as of reading: the node at PartnerRe/Esl/_Thread/can-we-record-a-couple-of-contacts-in-th-b8c357654b3e5687b21a is Active (version 910, created 2026-10-12 by sglauser, 46 messages). The failure is in the hub-activation/handoff cycle serving the thread, not in the persisted content.

Where and when

Single occurrence, single pod (memex-portal-deployment-679d7b6984-tzd87), one namespace (memex), at 17:17:41Z on 2026-10-13 — about 1h 42m after the thread's last recorded activity (15:35:35Z). The burst therefore hit while the thread was quiet, consistent with a user re-opening the chat view rather than with an in-flight agent round.

The same "giving up on owner … recycling in a LOOP" shape has appeared in the ops log before, in bursts on other owners: ~2026-10-07 10:36 (dozens of owners — Hosting/Triage/_Thread/*, Essentials/*, RFPProcessor, Manufacturing/ProductionEvent, …) and ~2026-10-10 08:22 (Admin/_LogIncident/* owners, captured by Ops/Actions/logs-memex-20261010-0821-route-5271). This is the first fingerprint of the shape on a user chat thread. The wording also differs from the 2026-10-10 lines ("Readers of this stream will now time out" vs. here "The stream now ENDS with this error so its readers can re-read") — the containment behavior at this site has changed between the two captures.

Impact

One user-visible failure to load one chat thread, once, for whoever had that view open. The stream is designed to end so the reader can re-read; whether the reload succeeded is not established. No data loss is evidenced — the thread node and its messages are intact. Judged sev:M from the numbers: one occurrence, one pod, one thread, with designed end-and-re-read containment. The earlier fleet-wide bursts of the same shape mean a recurrence across owners would re-rule this upward.

Not established

  • What requested the four (or more) recycles of the thread hub. The exception attributes the defect to "whatever is requesting the recycles", but this incident carries no QUIESCE reason, no dispose attribution, and no per-activation fault.
  • Why each successor activation died before answering — no exception from the activations themselves is on this incident.
  • Whether the view recovered on re-read, and whether other threads on this pod showed the same in the same window (only one sample was captured).
  • Whether the 2026-10-07 / 2026-10-10 fleet-wide bursts of the same shape share a cause with this instance.

Candidate causes and the reading that separates them

  1. Supervisor/execution relaunch loop on this thread. This is an agent thread (Agent/Assistant, model mistralai/codestral-2508 via Provider/OpenRouterEU) with an active supervision episode (c22400d305cf46ebaf0ae4337537b347), and its last recorded round ended with an upstream provider error. If each relaunch tears down and re-activates the thread hub, the sync-stream owner dies before it can answer — exactly matching "each successor dies before it can answer". Predicts [ThreadSupervisor] giving up on … after {n} relaunch(es) lines for this thread path in the 17:1x window (that log site has its own incident fingerprints). Reading: the ThreadSupervisor log for PartnerRe/Esl/_Thread/can-we-record-… in that window rules this in or out.
  2. Poison hub activation — the thread hub faults during initialization, the address recycles, and each successor hits the same fault. Predicts an identical error at hub activation for this path, once per activation. Reading: any activation-fault log for this thread path in that window.
  3. A recycle wave reaching the thread repeatedly. The 2026-09-18 change made one recycle on a node type reach every node of that type as a single wave that does not fan out; a wave explains one recycle, not a loop of four. Predicts QUIESCE reasons citing the same NodeType-recycle origin and the same loop on other threads at the same instant — which the single sample does not show, though one captured sample cannot exclude it. Reading: the QUIESCE reasons of the four activations.

The single reading that separates all three: the [QUIESCE-START] log lines for the four activations of PartnerRe/Esl/_Thread/can-we-record-… around 17:17:41Z — each carries who requested the teardown and why (see Reading a Disposal Stall Verdict).

Where to look


Evidence

Fingerprint d2f23d6b0444e043
Category MeshWeaver.Blazor.Chat.ThreadChatView
Severity Error
Exception MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException
Namespace memex
Pods memex-portal-deployment-679d7b6984-tzd87
Occurrences 1
First seen 2026-10-13 17:17:41Z
Last seen 2026-10-13 17:17:41Z
Routing not determined — no configured route matches the category MeshWeaver.Blazor.Chat.ThreadChatView. This repository is the configured fallback, not a finding about who owns the fault; the category names the LOGGER, which may not be the subject.
Recent log lines
2026-10-13 17:17:41Z memex-portal-deployment-679d7b6984-tzd87 fail: MeshWeaver.Blazor.Chat.ThreadChatView[0]
      Loading '/data/"thread"' in area 'Thread/1' in Area Thread/1
      MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException: Stream JM0MLo7Q7kKDuzO1tj1PBw: giving up on owner PartnerRe/Esl/_Thread/can-we-record-a-couple-of-contacts-in-th-b8c357654b3e5687b21a — 4 DISTINCT owner activations have refused this stream (budget 3). The address is recycling in a LOOP, not settling: each successor dies before it can answer. The stream now ENDS with this error so its readers can re-read; the fix is at whatever is requesting the recycles, not here.

Opened automatically from Admin/_LogIncident/d2f23d6b0444e043. Recurrences are folded into this issue rather than opening new ones.
It also stands for the whole log site 0b17bab61a7b3664: other fingerprints of this site fold in here as comments rather than opening tickets of their own.

Activity

  1. added
    bugSomething isn't working
    sev:MMedium - secondary path broken, or easy workaround
    on Oct 13, 2026
  2. systemorph-com commented on Oct 13, 2026

    @systemorph-com
    ContributorAuthor

    Folded in — a DIFFERENT fingerprint from the same log site.

    This issue tracks the log site 0b17bab61a7b3664 (MeshWeaver.Blazor.Chat.ThreadChatView), and these occurrences belong to it. They carry their own fingerprint — the masking split one site across several — so before this they would have opened a SEPARATE ticket. One log site fanned out into 46 of those, which is why they fold here instead. Nothing is discarded: the distinguishing evidence is below, and splitting this back out is a person's call.

    Folded fingerprint c267704c6a434497
    Log site 0b17bab61a7b3664
    Category MeshWeaver.Blazor.Chat.ThreadChatView
    Severity Error
    Exception MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException
    Detail Stream {n}xHXO_1R3U2WsOY5CmkfQw: giving up on owner {path} — {n} DISTINCT owner activations have refused this stream (budget {n}). The address is recycling in a LOOP, not settling: each successor dies before it can answer. The stream now ENDS with this error so its readers can re-read; the fix is at whatever is requesting the recycles, not here.
    Namespace memex-cloud
    Pods memex-portal-deployment-54856649cb-54lxb
    Occurrences 1
    First seen 2026-10-13 20:01:58Z
    Last seen 2026-10-13 20:01:58Z
    Already folded here 1 fingerprint(s)
    Incident Admin/_LogIncident/c267704c6a434497
    Triage called it ThreadChatView thread load fails: sync stream owner (phuong thread hub) recycled through 4 activations without answering
    What triage wrote about this fingerprint

    Observed

    MeshWeaver.Blazor.Chat.ThreadChatView failed to load the chat thread view for area Thread/1 (path /data/"thread"): the underlying data stream (id 4xHXO_1R3U2WsOY5CmkfQw) terminated with MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException, naming the owner address phuong/_Thread/where-do-i-add-materials-to-build-our-di-e79aaebbd6b6366796a0. By the exception's own account, 4 DISTINCT owner activations of that address refused the stream against the protocol's budget of 3: the address was recycling in a loop rather than settling, each successor activation dying before it could answer the stream. The stream ends with this error so its readers can re-read; the exception states plainly that the defect is at whatever is requesting the recycles, not at the stream.

    ThreadChatView is the log site that observed the failure while catching the load — the refusal itself is the serialization/stream layer's terminal answer once the owner-activation budget is spent.

    Where and when

    One occurrence, one pod, on the memex-cloud namespace. The refused owner is a personal thread of user phuong — a single owner address, not a fan-out across many nodes.

    The same exception shape (4 distinct activations, budget 3) appears in the ops log store in earlier fleet-wide bursts — dozens of different owners at once (Chat, Analysis, MyAi/_Policy, Edu/Lesson, Video/_Activity, rbuergi, …) around 2026-09-26 06:17–06:19Z, and again around 2026-10-07 10:36Z, on other pods. This incident is not one of those bursts: one stream, one owner, no neighbours. Whether the single-owner case shares a cause with the fleet bursts is not established; they are named here because whoever picks this up will find them in the log store and should know they were seen.

    Impact

    One user-visible failure to load one user's thread chat view at that instant. The stream is designed to end with this error so a re-read retries the load, so the impact to the reader is transient if the recycle loop stopped. Whether the thread still loads is not observed.

    Not established

    • What requested the recycles of the owner address. Nothing in this burst names the requester; the exception points at it but does not identify it.
    • Whether the recycling continued past the sample — no later log lines for this address are in the incident.
    • Why each successor activation died — no per-activation log lines are present, only the terminal exception; the incident carries no stack beyond the ThreadChatView log site.
    • Whether the 2026-09-26 / 2026-10-07 fleet bursts share this cause.
    • Whether the load succeeded on retry — no evidence either way.

    Candidate causes and the reading that separates them

    1. A repeat recycler at the owner address — something issuing repeated DisposeRequests to phuong/_Thread/… (a retype, an overlay self-heal, a NodeType recycle cascade that includes the thread, a governed Hosting/InstanceAction Recycle). Each fresh successor is torn down before it can serve the stream. Predicts: [QUIESCE-START] and/or [RecycleCascade] lines naming that thread's address on the same pod in the seconds before the sample. A Logs query for the address settles it in one read — the [QUIESCE-START] line carries the requester and reason (see Hosting/RecycleAction).
    2. The owner activation dying on its own each time it starts — an initialization or compile fault in that thread's hub that kills every successor before it can answer, with the router re-activating after each death. Predicts: repeated startup/compile exception lines for the address in the same window, and a thread that still fails to load afterwards; a read of the thread today discriminates.
    3. A routing/ownership loop at the pod-hub layer — the stream attach repeatedly landing on a non-owner replica that refuses, with the owner migrating per refusal (cf. MeshWeaver#5183, pod-hub refusal and owner migration). Predicts: PodHubNotHereException refusals naming the address in the same window, and the same stream attaching cleanly once placement settles.

    The first reading to take is the pod's log around the sample instant, filtered on the owner address: it separates all three at once.

    Where to look

    • MeshWeaver.Blazor.Chat.ThreadChatView — the load-failure catch that logged this.
    • MeshWeaver.Data.Serialization — SyncStreamOwnerRefusedException and the owner-refusal budget that raises it (the distinct-activation accounting against budget 3).
    • The owner address phuong/_Thread/where-do-i-add-materials-to-build-our-di-e79aaebbd6b6366796a0 — its hub lifecycle in the window.
    • Core Doc/Architecture/StaleStateUntilRecycle (a hub serves until a DisposeRequest reaches it) and Hosting/RecycleAction (what a governed recycle records, and what [QUIESCE-START] carries).

    Severity note: filed sev:M on the numbers — one occurrence, one pod, one owner, and a load that is designed to retry on re-read. The failure class is user-visible and the underlying recycle loop is unexplained; if the address still recycles or the pattern repeats, a human should re-rule it.

    Still occurring: 1 more since the last update (1 total).

    • Last seen: 2026-10-13 20:01:58Z
    • Pods: memex-portal-deployment-54856649cb-54lxb
    Recent log lines
    2026-10-13 20:01:58Z memex-portal-deployment-54856649cb-54lxb fail: MeshWeaver.Blazor.Chat.ThreadChatView[0]
          Loading '/data/"thread"' in area 'Thread/1' in Area Thread/1
          MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException: Stream 4xHXO_1R3U2WsOY5CmkfQw: giving up on owner phuong/_Thread/where-do-i-add-materials-to-build-our-di-e79aaebbd6b6366796a0 — 4 DISTINCT owner activations have refused this stream (budget 3). The address is recycling in a LOOP, not settling: each successor dies before it can answer. The stream now ENDS with this error so its readers can re-read; the fix is at whatever is requesting the recycles, not here.
    
  3. rbuergi commented on Oct 14, 2026

    @rbuergi
    Contributor

    This is a duplicate of #6729, which is the anchor for the whole SyncStreamOwnerRefusedException family. The fix is in #6756.

    The root cause was the subscriber's own host stopping, not an owner recycle loop. The pod logged Application is shutting down... in the same second as this burst. Its router answered each re-ask with an untagged ShuttingDown refusal (Host is shutting down, cannot route to …), and the sync stream counted each of those as a "distinct owner activation". The fix rides out such routing-layer refusals on the paced time axis, and their give-up names the route instead of an owner.

    Closing as a duplicate. Verification follows on #6729.

  4. systemorph-com commented on Oct 14, 2026

    @systemorph-com
    ContributorAuthor

    Folded in — a DIFFERENT fingerprint from the same log site.

    This issue tracks the log site 0b17bab61a7b3664 (MeshWeaver.Blazor.Chat.ThreadChatView), and these occurrences belong to it. They carry their own fingerprint — the masking split one site across several — so before this they would have opened a SEPARATE ticket. One log site fanned out into 46 of those, which is why they fold here instead. Nothing is discarded: the distinguishing evidence is below, and splitting this back out is a person's call.

    Folded fingerprint 0cf50d9d7d625b31
    Log site 0b17bab61a7b3664
    Category MeshWeaver.Blazor.Chat.ThreadChatView
    Severity Error
    Exception MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException
    Detail Stream Qlv5xA9kB0WbKiLVHT_zDA: giving up on owner sglauser — {n} DISTINCT owner activations have refused this stream (budget {n}). The address is recycling in a LOOP, not settling: each successor dies before it can answer. The stream now ENDS with this error so its readers can re-read; the fix is at whatever is requesting the recycles, not here.
    Namespace memex-cloud
    Pods memex-portal-deployment-6bd97645d4-fwns9
    Occurrences 1
    First seen 2026-10-14 07:26:58Z
    Last seen 2026-10-14 07:26:58Z
    Already folded here 2 fingerprint(s)
    Incident Admin/_LogIncident/0cf50d9d7d625b31
    What triage wrote about this fingerprint

    Observed

    The composer's context-resolution step in ThreadChatView (log site MeshWeaver.Blazor.Chat.ThreadChatView, message Resolving the composer's context in Area Composer) failed with MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException: its backing sync stream Qlv5xA9kB0WbKiLVHT_zDA, owned by the hub at address sglauser, terminated after 4 DISTINCT owner activations refused the stream (budget 3). The exception's own text states the address "is recycling in a LOOP, not settling: each successor dies before it can answer", that the stream is deliberately ended so its readers can re-read, and that the mechanism at issue is whatever requests the recycles — not the stream layer and not this view.

    This is the third distinct exception flavor to surface at this exact log-site family through the same gap that the #5372 fix round already recorded as its residual: ComposerAccess.ObserveContextChip (added by MeshWeaver.Plugins#2676) has no error arm, so anything but a clean permission answer reaches SurfaceError — there UnauthorizedAccessException (#5372, and the deleted-context DeliveryFailureException, #6081), here SyncStreamOwnerRefusedException. Not a duplicate of either: the refusal of the owner activation loop is a different mechanism, and those tickets' not-found verdicts are not what this sample carries.

    Where and when

    One occurrence, one pod of the memex-cloud portal, at 2026-10-14T07:26:58Z. It carries more weight than its count of 1: it sits inside a same-second multi-owner burst on the same pod — in the ~60 ms around 07:26:58, at least three other sync streams ended with the identical shape "4 DISTINCT owner activations refused this stream (budget 3)":

    Several unrelated owner addresses exhausting the same activation budget in the same instant is not the signature of four coincident per-address faults. A larger multi-owner burst of the same shape occurred the previous evening (2026-10-13 ~19:54–20:27 on memex, plus the Admin-owner give-up at 20:45Z filed as #6735), so the mechanism predates today and is not confined to this pod or these owners.

    Impact

    For the affected window the composer's context chip failed for the sglauser session — an intermittent user-visible failure that the stream layer's design bounds (the stream ends so readers re-read on the next render). No data loss indicated. The concern that would re-rule this: while the owner loop ran, the sglauser address was effectively unavailable to anything reading or writing it, and the same systemic trigger hit at least three other owner addresses on the same pod in the same second.

    Not established

    • What requested the recycles of the sglauser hub. The incident carries no stack beyond the log site and no recycle/quiesce log line; nothing read here names a requester, a DisposeRequest reason, an install, a roll or a restart coinciding with 07:26:58Z.
    • Whether each of the four activations died on its own (init fault) or was disposed again by an external recycler — the exception text supports both readings.
    • Whether the loop settled after the fourth refusal, and whether the composer recovered on re-read (predicted by the design, not observed).
    • Whether the same-second siblings share one requester — the coincidence is observed, the common cause is inferred.
    • Whether this fingerprint recurred at this site before today (the same shape appears in fleet logs since late September against other owners, but not at this log site with this owner).

    Candidate causes and the reading that separates them

    1. A systemic recycle trigger on that pod at that instant (roll, restart, convergence or config event recycling many hubs at once — each stream's owner dying before answering). Predicts [QUIESCE-START]/recycle log lines naming several of the burst's owner addresses (sglauser, Admin/Subscriptions/sglauser, Store/Payments/_Rejected/973c…) at ~07:26:58Z, plus a deployment or pod event in that window. Reading: the pod's logs for that second and the deployment events for memex-portal-deployment-6bd97645d4-fwns9.
    2. A per-address fault repeatedly killing the sglauser hub during activation. Predicts error-level activation/init lines for exactly the sglauser address immediately before each refusal, and no recycle lines for the sibling owners unless unrelated. Reading: the pod's hub-init logs for sglauser before 07:26:58Z.
    3. Interaction with the recent ActivationRecycle changes (Systemorph/MeshWeaver PRs ActivationRecycle: recycle a NodeType's live activations on every process #6054 "recycle a NodeType's live activations on every process", fix(graph): defer recycle service resolution until request delivery #6072, EXPRESS: ActivationRecycle resolves nothing heavy on the mesh hub's init turn (Autofac lock-order deadlock reds Plugins main) #6084 — all landed the week of Oct 7). Predicts the give-up loops appearing or sharply increasing only after those PRs rolled out; the late-September historical occurrences argue against it being purely new, but per-site timing has not been checked. Reading: whether the loop-shape occurrences cluster after the rollout date.

    The one reading that separates the first two is the [QUIESCE-START] reason at the sglauser address: the same reason repeated four times names the loop's driver; four different reasons, or none, points elsewhere.

    Related, not duplicates

    Where to look

    Left closed — this ticket was closed as NOT PLANNED, which is a decision rather than a claim that the fault stopped. The occurrences below are recorded here; if the decision should change, that is a person's call and not a recurrence's.

    Still occurring: 1 more since the last update (1 total).

    • Last seen: 2026-10-14 07:26:58Z
    • Pods: memex-portal-deployment-6bd97645d4-fwns9
    Recent log lines
    2026-10-14 07:26:58Z memex-portal-deployment-6bd97645d4-fwns9 fail: MeshWeaver.Blazor.Chat.ThreadChatView[0]
          Resolving the composer's context in Area Composer
          MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException: Stream Qlv5xA9kB0WbKiLVHT_zDA: giving up on owner sglauser — 4 DISTINCT owner activations have refused this stream (budget 3). The address is recycling in a LOOP, not settling: each successor dies before it can answer. The stream now ENDS with this error so its readers can re-read; the fix is at whatever is requesting the recycles, not here.
    
  5. systemorph-com commented on Oct 14, 2026

    @systemorph-com
    ContributorAuthor

    Folded in — a DIFFERENT fingerprint from the same log site.

    This issue tracks the log site 0b17bab61a7b3664 (MeshWeaver.Blazor.Chat.ThreadChatView), and these occurrences belong to it. They carry their own fingerprint — the masking split one site across several — so before this they would have opened a SEPARATE ticket. One log site fanned out into 46 of those, which is why they fold here instead. Nothing is discarded: the distinguishing evidence is below, and splitting this back out is a person's call.

    Folded fingerprint eb1c8d79bc3ac007
    Log site 0b17bab61a7b3664
    Category MeshWeaver.Blazor.Chat.ThreadChatView
    Severity Error
    Exception MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException
    Detail Stream cGZD9z_L5k6A_x-SD8AvaQ: giving up on owner {path} — {n} DISTINCT owner activations have refused this stream (budget {n}). The address is recycling in a LOOP, not settling: each successor dies before it can answer. The stream now ENDS with this error so its readers can re-read; the fix is at whatever is requesting the recycles, not here.
    Namespace memex
    Pods memex-portal-deployment-567896cdc8-84nqz
    Occurrences 1
    First seen 2026-10-14 10:25:48Z
    Last seen 2026-10-14 10:25:48Z
    Already folded here 3 fingerprint(s)
    Incident Admin/_LogIncident/eb1c8d79bc3ac007
    Triage called it ThreadChatView's sync stream gives up on a thread owner that recycled four times before any activation could answer (SyncStreamOwnerRefusedException)
    What triage wrote about this fingerprint

    Observed

    ThreadChatView (MeshWeaver.Blazor.Chat) failed while loading the thread chat area for mkleiner/_Thread/wo-ist-jetzt-der-businessplan-fd1de4a8cc8b305e8df8 ("Wo ist jetzt der Businessplan?"): the view's synchronization stream cGZD9z_L5k6A_x-SD8AvaQ ended with MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException — four distinct activations of the stream's owner (that thread's hub address) refused the stream within a budget of three, i.e. the owner address recycled in a loop and each successor died before it could answer. The exception's own text states the stream now ends so its readers can re-read, and that the defect is at whatever requests the recycles — the log site is the reporter, not the fault.

    Where and when

    One pod of the memex portal deployment, one occurrence, one owner. The owner is a live, actively-used user thread (an ExecutiveAssistant harness on Provider/OpenRouterEU/z-ai/glm-5.3) whose last activity precedes the failure by about a minute, mid-conversation (a round that had just created and displayed a new page). So the recycles happened while the thread was being written, not after it had gone idle.

    This fingerprint sits in a larger family: the same exception has been ticketed repeatedly at sibling view sites over the past weeks, in bursts that cover many views and many owners in one window (visible in Ops/Logs, e.g. 2026-09-26 and 2026-10-07, and sibling LogIncidents at other view sites within minutes of this one). Those bursts share the "N distinct owner activations, recycling in a loop" shape. Whether this occurrence and that family share one root cause is not established.

    Impact

    The reader of that thread's chat area is handed an error for the stream; the component's design intends readers to re-read, so the failure is intermittent/self-recovering rather than a dead area. In this instance one user's thread view was affected; judged on this incident alone the impact is small, but the family's recurrence across many areas suggests the underlying recycle loop is not rare.

    Not established

    • What requested the four owner recycles. The evidence names the owner and the count, not the recycler.
    • Whether this occurrence and the sibling-burst family share one cause.
    • Whether the thread hub's successors died mid-initialization, mid-teardown, or refused for another reason (permission, compile, store) — the exception does not say why each activation refused.
    • Whether it still occurs for this thread after the re-read.

    Candidate causes and the reading that separates them

    1. A supervision/relaunch loop on the thread's own execution. The thread node carries a supervisionEpisode (dd411faed51744738e8fc2ffa3b2ed2d); the fleet has an open family of owner threads wedging and being relaunched repeatedly (e.g. Systemorph/MeshWeaver.Plugins#2912, feat(build-project): the module-libraries shelf — additional libraries ride with a recorded closure #2914, fix(module-pack): the inspect step needs PROJECT in its env #2919, A stale MainNode from a plugin's .md Skill survives install: the ?? in ParseCanonical is dead code, and the 1b' guard misses the shape #2939, An Editor can now delete the satellite it was allowed to publish — one rule, one answer (#2913) #2945). Predicts: relaunch records under that supervision episode and repeated [QUIESCE-START]/teardown lines naming the thread's hub address in the pod log in the minutes before the failure. Reading: the supervision episode's records and the pod log tail for that thread address.
    2. A parent/package-level recycle cascading onto the thread hub. A recycle of an ancestor address tears down dependent hubs and re-activates them. Predicts: [QUIESCE-START] lines with one shared reason across several addresses on the same pod in the same window, not just the thread's. Reading: pod log quiesce lines for the window, grouped by reason.
    3. The thread's own writes churning its hub (the agent round writing the new page). Predicts: no external recycler — teardown lines only where the round itself touches the thread, with no supervision relaunch. Reading: the same pod log, correlated with the thread node's write history in the window.

    Duplicate check

    No existing issue found for SyncStreamOwnerRefusedException. Related but distinct: #6047 (a held read freezing on owner hand-off — a different failure at the same owner/reader boundary) and the wedged-owner-thread family above (cause, not symptom). A human may judge this a duplicate of whatever issue collects the sibling family.

    Where to look

    • MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException (MeshWeaver.Data) — the owner-activation budget and the give-up that raised this.
    • ThreadChatView (MeshWeaver.Blazor.Chat) — the log site; it reports, it does not cause.
    • The owner thread node and its supervision episode: mkleiner/_Thread/wo-ist-jetzt-der-businessplan-fd1de4a8cc8b305e8df8.
    • Architecture context: /Doc/Architecture/StreamLivenessAndTheHubReference and /Doc/Architecture/SyncHubPopulation for the sync-hub ownership model, and /Doc/Architecture/StaleStateUntilRecycle for the recycle path.

    Left closed — this ticket was closed as NOT PLANNED, which is a decision rather than a claim that the fault stopped. The occurrences below are recorded here; if the decision should change, that is a person's call and not a recurrence's.

    Still occurring: 1 more since the last update (1 total).

    • Last seen: 2026-10-14 10:25:48Z
    • Pods: memex-portal-deployment-567896cdc8-84nqz
    Recent log lines
    2026-10-14 10:25:48Z memex-portal-deployment-567896cdc8-84nqz fail: MeshWeaver.Blazor.Chat.ThreadChatView[0]
          Loading '/data/"thread"' in area 'Thread/1' in Area Thread/1
          MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException: Stream cGZD9z_L5k6A_x-SD8AvaQ: giving up on owner mkleiner/_Thread/wo-ist-jetzt-der-businessplan-fd1de4a8cc8b305e8df8 — 4 DISTINCT owner activations have refused this stream (budget 3). The address is recycling in a LOOP, not settling: each successor dies before it can answer. The stream now ENDS with this error so its readers can re-read; the fix is at whatever is requesting the recycles, not here.
    
  6. systemorph-com commented on Oct 14, 2026

    @systemorph-com
    ContributorAuthor

    Folded in — a DIFFERENT fingerprint from the same log site.

    This issue tracks the log site 0b17bab61a7b3664 (MeshWeaver.Blazor.Chat.ThreadChatView), and these occurrences belong to it. They carry their own fingerprint — the masking split one site across several — so before this they would have opened a SEPARATE ticket. One log site fanned out into 46 of those, which is why they fold here instead. Nothing is discarded: the distinguishing evidence is below, and splitting this back out is a person's call.

    Folded fingerprint 75f1971ec1b1cfed
    Log site 0b17bab61a7b3664
    Category MeshWeaver.Blazor.Chat.ThreadChatView
    Severity Error
    Exception MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException
    Detail Stream v4a2Hkx_EES8{n}zT1dGLhQ: giving up on owner BusinessPlan2{n} — {n} DISTINCT owner activations have refused this stream (budget {n}). The address is recycling in a LOOP, not settling: each successor dies before it can answer. The stream now ENDS with this error so its readers can re-read; the fix is at whatever is requesting the recycles, not here.
    Namespace memex
    Pods memex-portal-deployment-567896cdc8-84nqz
    Occurrences 1
    First seen 2026-10-14 10:25:48Z
    Last seen 2026-10-14 10:25:48Z
    Already folded here 4 fingerprint(s)
    Incident Admin/_LogIncident/75f1971ec1b1cfed
    Triage called it Chat composer context resolution in the young Space BusinessPlan2026 faults as its hub recycles through 4 owner activations — sync stream gives up (SyncStreamOwnerRefusedException)
    What triage wrote about this fingerprint

    Observed

    The log site is MeshWeaver.Blazor.Chat.ThreadChatView, resolving the composer's context in area Thread/1 on the memex portal. The resolution faulted with MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException: sync stream v4a2Hkx_EES808zT1dGLhQ ended after 4 DISTINCT owner activations of the Space BusinessPlan2026 refused it, against the recycle re-arm budget of 3 (JsonSynchronizationStream.MaxRecycleReArms, MeshWeaver.Data). Per the give-up contract (#6602) this is one give-up event that ends the stream so its readers can re-read; ThreadChatView is the reporting site, not the defect site. The exception's own diagnostic names the shape: the address is recycling in a loop rather than settling, and the defect is at whatever requests the recycles.

    Distinctive about this burst against the SyncStreamOwnerRefusedException family: the refusing owner is a Space created this morning (BusinessPlan2026, created 2026-10-14 07:51Z by mkleiner, version 2) — a young node under active construction, not the long-lived subscription/payment/store owners that dominated yesterday's bursts, and this incident sits on the memex instance rather than the memex-cloud pods that carried most of the family. Chat threads referencing the plan were active in the minutes around the event (mkleiner/BusinessPlan2026/_Thread/… at 07:32–07:53; mkleiner/_Thread/wo-ist-jetzt-der-businessplan-… 10:10–10:24, asking where the business plan now lives).

    Where and when

    One pod, one instant, one owner, one stream — a single give-up, not a storm: no second owner refused at the same instant on this instance in the evidence I can read, unlike the two-owner bursts of 2026-10-14 07:26Z on memex-cloud. The owner Space exists and is readable now (I read it), so the address is not a deleted node; whether its hub settled after the give-up was not verified.

    Impact

    One user's chat composer context resolution failed once. By design the stream ends loudly and the reader classifies the fault transient and re-subscribes, so the failure is bounded; whether this view actually recovered was not verified. Judged sev:M from the numbers (single occurrence, one pod, one view), not from the family's urgency — if the family's storm correlation holds, a human re-rules the family upward rather than this ticket alone.

    Not established

    • What requested the four recycles of BusinessPlan2026 — this incident carries no [QUIESCE-START] line, no dispose attribution and no per-activation fault; I found no quiesce/recycle log line naming this address in the window in the readable log store.
    • Whether the four counted activations were four real activations, or a settling teardown charged several times (the activation-identity drift class of Name WHICH recycling failure a ShuttingDown read hit (#2025) #2376 and Sync stream give-up leaves the reader on a frozen last value; one owner teardown is counted as several activations #6602).
    • Whether the Space's hub was failing to initialize on each activation (e.g. a content/NodeType fault inside the young Space), and whether the address settled afterwards or still cycles.
    • Whether a roll, restart or module live-update coincided with the instant on this pod, and whether other owners on this instance refused in the same window.
    • Which chat thread's composer was resolving — the sample names only Thread/1.

    Candidate causes and the reading that separates them

    1. A real recycle loop at the Space's own hub. A young, actively-written Space whose hub activation fails repeatedly (each successor dies before it can answer) fits the exception's own diagnostic. Predicts repeated [QUIESCE-START]/recycle lines naming BusinessPlan2026 in the seconds before 10:25:48Z, each with its requester and reason, and possibly a per-activation fault. Reading: this pod's quiesce/recycle lines filtered to this address, and the Space's hub activation history.
    2. Activation-tag drift. Fewer real activations than the four counted — one settling teardown charged as several, of the class Name WHICH recycling failure a ShuttingDown read hit (#2025) #2376 pinned and Sync stream give-up leaves the reader on a frozen last value; one owner teardown is counted as several activations #6602's test guards. Predicts the four counted tokens resolving to one or two real activations with the address settling normally. Reading: the per-activation tokens (minted by ShutdownNack, MeshWeaver.Messaging.Contract) on the refusals for stream v4a2Hkx_EES808zT1dGLhQ.
    3. The instance-wide recycle-storm family. The family has burst across ~20 view log sites since 2026-10-13; a roll or module live-update on this pod would produce the same single-owner give-up. Predicts quiesce lines naming many different addresses on this pod around the window, plus rollout/deployment records near 10:25Z. Reading: the pod's unfiltered quiesce lines and the deployment records for the instant.

    The [QUIESCE-START] reading separates all three directly: it names who asked for each teardown and why.

    Where to look

    Left closed — this ticket was closed as NOT PLANNED, which is a decision rather than a claim that the fault stopped. The occurrences below are recorded here; if the decision should change, that is a person's call and not a recurrence's.

    Still occurring: 1 more since the last update (1 total).

    • Last seen: 2026-10-14 10:25:48Z
    • Pods: memex-portal-deployment-567896cdc8-84nqz
    Recent log lines
    2026-10-14 10:25:48Z memex-portal-deployment-567896cdc8-84nqz fail: MeshWeaver.Blazor.Chat.ThreadChatView[0]
          Resolving the composer's context in Area Thread/1
          MeshWeaver.Data.Serialization.SyncStreamOwnerRefusedException: Stream v4a2Hkx_EES808zT1dGLhQ: giving up on owner BusinessPlan2026 — 4 DISTINCT owner activations have refused this stream (budget 3). The address is recycling in a LOOP, not settling: each successor dies before it can answer. The stream now ENDS with this error so its readers can re-read; the fix is at whatever is requesting the recycles, not here.
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingsev:MMedium - secondary path broken, or easy workaround

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions