Repository navigation
Description
What is failing
LogIncidentControlPlane (Observability plugin, module MeshWeaver.Observability) failed to write a comment onto an existing incident node, Admin/_LogIncident/3d329d5ef2237493 — the long-running "Unexpected error during node creation" incident. The update aborted because the incident's per-node hub never received its initial state within the 30s deadline. The control plane retained the request; per the log message it is retried on the next change to the incident collection.
Probable cause — medium confidence
Three of the four causes the timeout message itself enumerates are ruled out: the target node exists and has been routable since 2026-08-13 (v140 at the time of the failure), the path is the standard incident path, and nothing deleted it. That leaves the fourth — "the per-node hub activated but its MeshDataSource didn't load the node from persistence" — and the surrounding evidence points at a transient persistence/cluster disruption in exactly that window (roughly 12:00–12:03 UTC on 2026-08-30):
- The target incident's own samples show raw Npgsql connect timeouts (
NpgsqlConnector.ConnectAsync→ "The operation has timed out") minutes before and after the failed write — the same signature that was hammeringCreateNodeacross ~30 pods at that time. Admin/_LogIncident/34b8810612de84c1(MembershipAgent failing to get ping responses from active silos) was active in the same window, consistent with a broader cluster disruption rather than a plugin-specific fault.
Medium confidence: the correlation is strong but circumstantial; a hub-activation race cannot be excluded from this evidence alone.
Impact — low
A single transient event with no lost data: the request was retained, the target incident node was written successfully again ~90 seconds later, and the control plane created this incident's own node seconds after that — mesh writes were healthy again immediately. Two things worth noting: a longer persistence outage would stall every incident comment write for the full 30s and lean entirely on the next-change retry; and that retry model depends on a later change to the incident collection — for a quiet incident that may never come. Worth verifying that assumption in the code.
Where to look
src/MeshWeaver.Observability/LogIncidentControlPlane.csandsrc/MeshWeaver.Observability/LogIncidentWriteExtensions.cs(Observability plugin v1.2) — the comment-write path that waits on hub initial state.- The mesh update flow's initial-state wait (the "Update aborted: no initial state arrived … within 30s" message): when the hub's persistence call fails, failing fast with that error beats a silent 30s wait followed by a four-way guess at the cause — telling "node missing" from "database down" here required cross-referencing sibling incidents.
- Related, same component, different failure modes (not duplicates):
Admin/_LogIncident/3b6b24e5f282f36b→ issue LogIncidentControlPlane loses the first occurrence of every new incident — delivery races node registration #2167 (first-occurrence delivery race), and suppressedAdmin/_LogIncident/028cafd755fa90d2(shutdown race). - Side note for whoever picks this up: the target incident
3d329d5ef2237493is itself in status Failed withResource not accessible by integrationon its GitHub filing (issue PostgreSQL rejects node creation when serialized content contains invalid Unicode escape sequences #1449) — a separate problem worth its own look.
Evidence
| Fingerprint | c94d1352613d70de |
| Category | MeshWeaver.Observability.LogIncidentControlPlane |
| Severity | Error |
| Exception | MeshWeaver.Observability.IncidentWriteFailedException |
| Namespace | memex |
| Pods | memex-portal-deployment-65f8c68995-z27tq, memex-portal-deployment-66f4b5c9b6-4k6d5, memex-portal-deployment-658bbfd875-xpf9w, memex-portal-deployment-75d46686fb-5gpz8, memex-portal-deployment-644ffc96b9-58pv4, memex-portal-deployment-644ffc96b9-mttj7, memex-portal-deployment-dd84cc6cf-mrp8s, memex-portal-deployment-5b7954fc59-4npbc, memex-portal-deployment-5b7954fc59-n7vzq, memex-portal-deployment-7f6bf4c7cc-2649s, memex-portal-deployment-5b4db95fdb-jtmds, memex-portal-deployment-5f8f7cf98d-smhqc, memex-portal-deployment-55547495d7-c8z9r, memex-portal-deployment-58c88885f8-lhgp7, memex-portal-deployment-58c88885f8-h5hfs, memex-portal-deployment-578b7bc84b-msvh5, memex-portal-deployment-67b654495f-6xjg9, memex-portal-deployment-67b654495f-d8g8n, memex-portal-deployment-556bcb747f-ptp82, memex-portal-deployment-b6d54dcc7-x7lwf, memex-portal-deployment-77898c4947-bfnft, memex-portal-deployment-7d5d458cc4-cbztk, memex-portal-deployment-d77fd7c88-x7nzm, memex-portal-deployment-78c786fcf6-bs4fn |
| Occurrences | 1074 |
| First seen | 2026-08-30 12:01:31Z |
| Last seen | 2026-09-20 07:25:00Z |
| Routing | not determined — no configured route matches the category MeshWeaver.Observability.LogIncidentControlPlane. 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-09-03 17:22:22Z memex-portal-deployment-77898c4947-bfnft fail: MeshWeaver.Observability.LogIncidentControlPlane[0]
Incident 9ca334c1e8dad9ca: Comment could not write Admin/_LogIncident/9ca334c1e8dad9ca, so nothing was recorded on the incident. It still carries its request and is picked up again on the next change to the incident collection.
MeshWeaver.Observability.IncidentWriteFailedException: The incident at 'Admin/_LogIncident/9ca334c1e8dad9ca' could not be written.
---> System.TimeoutException: Update aborted: no initial state arrived for 'Admin/_LogIncident/9ca334c1e8dad9ca' within 30s. Likely causes — (1) RLS silently rejected the prior CreateNode, (2) the path is misspelled / points at a namespace no NodeType claims, (3) the node was deleted between create and update, or (4) the per-node hub activated but its MeshDataSource didn't load the node from persistence.
---> System.TimeoutException: The operation has timed out.
--- End of inner exception stack trace ---
--- End of inner exception stack trace ---
2026-09-08 03:29:51Z memex-portal-deployment-7d5d458cc4-cbztk fail: MeshWeaver.Observability.LogIncidentControlPlane[0]
Incident 782ef3ac96819798: Comment could not write Admin/_LogIncident/782ef3ac96819798, so nothing was recorded on the incident. It still carries its request and is picked up again on the next change to the incident collection.
MeshWeaver.Observability.IncidentWriteFailedException: The incident at 'Admin/_LogIncident/782ef3ac96819798' could not be written.
---> MeshWeaver.Mesh.MeshNodeStreamException: MeshNode Unknown at 'Admin/_LogIncident/782ef3ac96819798': Host is shutting down, cannot route to Admin/_LogIncident/782ef3ac96819798
--- End of inner exception stack trace ---
2026-09-17 14:24:24Z memex-portal-deployment-d77fd7c88-x7nzm fail: MeshWeaver.Observability.LogIncidentControlPlane[0]
Incident e4a97855ab595beb: Comment could not write Admin/_LogIncident/e4a97855ab595beb, so nothing was recorded on the incident. It still carries its request and is picked up again on the next change to the incident collection.
MeshWeaver.Observability.IncidentWriteFailedException: The incident at 'Admin/_LogIncident/e4a97855ab595beb' could not be written.
---> MeshWeaver.Mesh.MeshNodeStreamException: MeshNode Unknown at 'Admin/_LogIncident/e4a97855ab595beb': Host is shutting down, cannot route to Admin/_LogIncident/e4a97855ab595beb
--- End of inner exception stack trace ---
2026-09-17 14:24:24Z memex-portal-deployment-d77fd7c88-x7nzm fail: MeshWeaver.Observability.LogIncidentControlPlane[0]
Incident e4a97855ab595beb: Comment could not write Admin/_LogIncident/e4a97855ab595beb, so nothing was recorded on the incident. It still carries its request and is picked up again on the next change to the incident collection.
MeshWeaver.Observability.IncidentWriteFailedException: The incident at 'Admin/_LogIncident/e4a97855ab595beb' could not be written.
---> MeshWeaver.Mesh.MeshNodeStreamException: MeshNode Unknown at 'Admin/_LogIncident/e4a97855ab595beb': Host is shutting down, cannot route to Admin/_LogIncident/e4a97855ab595beb
--- End of inner exception stack trace ---
2026-09-17 14:25:47Z memex-portal-deployment-d77fd7c88-x7nzm fail: MeshWeaver.Observability.LogIncidentControlPlane[0]
Incident 9b70b639c4e77af3: the Comment reconcile could not write Admin/_LogIncident/9b70b639c4e77af3, so nothing was recorded on the incident. It is re-attempted the next time its trigger fires — the next collection emission or the next comment-debt tick.
MeshWeaver.Observability.IncidentWriteFailedException: The incident at 'Admin/_LogIncident/9b70b639c4e77af3' could not be written.
---> System.TimeoutException: Update aborted: no initial state arrived for 'Admin/_LogIncident/9b70b639c4e77af3' within 30s. Likely causes — (1) RLS silently rejected the prior CreateNode, (2) the path is misspelled / points at a namespace no NodeType claims, (3) the node was deleted between create and update, or (4) the per-node hub activated but its MeshDataSource didn't load the node from persistence. NO change item at all reached the mirror inside the bound — no snapshot ever hydrated. This does NOT establish that the owner never answered: a fresh subscribe is ACKNOWLEDGED BEFORE hydration, so an owner that acked and then produced no frame (a cold data source, a per-node hub still activating, an initial read that yielded nothing) reads identically here. Both the owner's activation/routing AND its initial read are still in scope.
---> MeshWeaver.Mesh.MeshNodeStreamHandle+BaseStateTimeoutException: NO change item at all reached the mirror inside the bound — no snapshot ever hydrated. This does NOT establish that the owner never answered: a fresh subscribe is ACKNOWLEDGED BEFORE hydration, so an owner that acked and then produced no frame (a cold data source, a per-node hub still activating, an initial read that yielded nothing) reads identically here. Both the owner's activation/routing AND its initial read are still in scope.
--- End of inner exception stack trace ---
--- End of inner exception stack trace ---
2026-09-17 17:27:33Z memex-portal-deployment-d77fd7c88-x7nzm fail: MeshWeaver.Observability.LogIncidentControlPlane[0]
Incident d1cd36f53a5f3a6c: the Comment reconcile could not write Admin/_LogIncident/d1cd36f53a5f3a6c, so nothing was recorded on the incident. It is re-attempted the next time its trigger fires — the next collection emission or the next comment-debt tick.
MeshWeaver.Observability.IncidentWriteFailedException: The incident at 'Admin/_LogIncident/d1cd36f53a5f3a6c' could not be written.
---> System.TimeoutException: Update aborted: no initial state arrived for 'Admin/_LogIncident/d1cd36f53a5f3a6c' within 30s. Likely causes — (1) RLS silently rejected the prior CreateNode, (2) the path is misspelled / points at a namespace no NodeType claims, (3) the node was deleted between create and update, or (4) the per-node hub activated but its MeshDataSource didn't load the node from persistence. NO change item at all reached the mirror inside the bound — no snapshot ever hydrated. This does NOT establish that the owner never answered: a fresh subscribe is ACKNOWLEDGED BEFORE hydration, so an owner that acked and then produced no frame (a cold data source, a per-node hub still activating, an initial read that yielded nothing) reads identically here. Both the owner's activation/routing AND its initial read are still in scope.
---> MeshWeaver.Mesh.MeshNodeStreamHandle+BaseStateTimeoutException: NO change item at all reached the mirror inside the bound — no snapshot ever hydrated. This does NOT establish that the owner never answered: a fresh subscribe is ACKNOWLEDGED BEFORE hydration, so an owner that acked and then produced no frame (a cold data source, a per-node hub still activating, an initial read that yielded nothing) reads identically here. Both the owner's activation/routing AND its initial read are still in scope.
--- End of inner exception stack trace ---
--- End of inner exception stack trace ---
2026-09-20 07:24:30Z memex-portal-deployment-65f8c68995-z27tq fail: MeshWeaver.Observability.LogIncidentControlPlane[0]
Incident dce323795bb2ee6f: Triage could not write Admin/_LogIncident/dce323795bb2ee6f, so nothing was recorded on the incident. It still carries its request and is picked up again on the next change to the incident collection.
MeshWeaver.Observability.IncidentWriteFailedException: The incident at 'Admin/_LogIncident/dce323795bb2ee6f' could not be written.
---> MeshWeaver.Mesh.MeshNodeStreamException: MeshNode Unknown at 'Admin/_LogIncident/dce323795bb2ee6f': Host is shutting down, cannot route to Admin/_LogIncident/dce323795bb2ee6f
--- End of inner exception stack trace ---
2026-09-20 07:24:30Z memex-portal-deployment-65f8c68995-z27tq fail: MeshWeaver.Observability.LogIncidentControlPlane[0]
Incident dce323795bb2ee6f: Triage could not write Admin/_LogIncident/dce323795bb2ee6f, so nothing was recorded on the incident. It still carries its request and is picked up again on the next change to the incident collection.
MeshWeaver.Observability.IncidentWriteFailedException: The incident at 'Admin/_LogIncident/dce323795bb2ee6f' could not be written.
---> MeshWeaver.Mesh.MeshNodeStreamException: MeshNode Unknown at 'Admin/_LogIncident/dce323795bb2ee6f': Host is shutting down, cannot route to Admin/_LogIncident/dce323795bb2ee6f
--- End of inner exception stack trace ---
2026-09-20 07:24:30Z memex-portal-deployment-65f8c68995-z27tq fail: MeshWeaver.Observability.LogIncidentControlPlane[0]
Incident dce323795bb2ee6f: Triage could not write Admin/_LogIncident/dce323795bb2ee6f, so nothing was recorded on the incident. It still carries its request and is picked up again on the next change to the incident collection.
MeshWeaver.Observability.IncidentWriteFailedException: The incident at 'Admin/_LogIncident/dce323795bb2ee6f' could not be written.
---> MeshWeaver.Mesh.MeshNodeStreamException: MeshNode Unknown at 'Admin/_LogIncident/dce323795bb2ee6f': Host is shutting down, cannot route to Admin/_LogIncident/dce323795bb2ee6f
--- End of inner exception stack trace ---
2026-09-20 07:25:00Z memex-portal-deployment-78c786fcf6-bs4fn fail: MeshWeaver.Observability.LogIncidentControlPlane[0]
Incident dce323795bb2ee6f: Triage could not write Admin/_LogIncident/dce323795bb2ee6f, so nothing was recorded on the incident. It still carries its request and is picked up again on the next change to the incident collection.
MeshWeaver.Observability.IncidentWriteFailedException: The incident at 'Admin/_LogIncident/dce323795bb2ee6f' could not be written.
---> System.TimeoutException: Update aborted: no initial state arrived for 'Admin/_LogIncident/dce323795bb2ee6f' within 30s. Likely causes — (1) RLS silently rejected the prior CreateNode, (2) the path is misspelled / points at a namespace no NodeType claims, (3) the node was deleted between create and update, or (4) the per-node hub activated but its MeshDataSource didn't load the node from persistence. NO change item at all reached the mirror inside the bound — no snapshot ever hydrated. This does NOT establish that the owner never answered: a fresh subscribe is ACKNOWLEDGED BEFORE hydration, so an owner that acked and then produced no frame (a cold data source, a per-node hub still activating, an initial read that yielded nothing) reads identically here. Both the owner's activation/routing AND its initial read are still in scope.
---> MeshWeaver.Mesh.MeshNodeStreamHandle+BaseStateTimeoutException: NO change item at all reached the mirror inside the bound — no snapshot ever hydrated. This does NOT establish that the owner never answered: a fresh subscribe is ACKNOWLEDGED BEFORE hydration, so an owner that acked and then produced no frame (a cold data source, a per-node hub still activating, an initial read that yielded nothing) reads identically here. Both the owner's activation/routing AND its initial read are still in scope.
--- End of inner exception stack trace ---
--- End of inner exception stack trace ---
This issue replaces https://github.com/Systemorph/MeshWeaver/issues/2765, which no longer resolves. That ticket was deleted, or transferred to another repository — if it was transferred, the link above still redirects to wherever it went. Either way the recurrences this fault kept accumulating could no longer be folded into it. The counts above cover the whole history of the fault, not just what happened since.
Re-addressed by the current identity function: this incident inherited a30c09f918c68632 (Systemorph/MeshWeaver.Plugins#1796). Those nodes are superseded and will not fold, file or comment again.
Opened automatically from Admin/_LogIncident/c94d1352613d70de. Recurrences are folded into this issue rather than opening new ones.
Activity
rbuergi commentedon Sep 22, 2026
This ticket is a FOLD of at least three different terminals, so its 1074 cannot verify any fix — and its biggest share is not a mesh defect
Grouped as part of the
area:meshtimeout cluster. Read every retained sample's inner exception rather than the outerIncidentWriteFailedException, and this one fingerprint covers three distinct roots:TimeoutException: … no initial state arrived … within 30s→BaseStateTimeoutException— "NO change item at all reached the mirror"MeshNodeStreamException: Host is shutting down, cannot route to 'Admin/_LogIncident/…'TimeoutException: The operation has timed out.nested under the 30 s (the 2026-08-30 Npgsql window)Counting the samples that are quoted in the body: the
Host is shutting downterminal appears 6 times of 10 (782ef3ac96819798×1,e4a97855ab595beb×2,dce323795bb2ee6f×3). That is the largest share of the visible population, and it is not a defect in the mesh at all — a write refused at shutdown is the routing layer answering truthfully. What is wrong is thatLogIncidentControlPlanekeeps issuing reconcile writes while the host is stopping and then reports the refusal atError, which mints an incident on the way down. That is a classification fix, and it lives in the caller.Consequence for verification, and it is the reason this matters: a fix for any one of these three cannot be judged against this ticket's occurrence count, because the other two keep climbing. The honest form is per-terminal — the terminal you fixed must be absent from samples taken after the fix reached the replica — and a fix that changes the message also changes the fingerprint, which freezes this counter for a reason that is not the fix working.
Where the work is
The log site is
MeshWeaver.Observability.LogIncidentControlPlane.src/MeshWeaver.Observabilitydoes not exist in core (ls src/MeshWeaver.Observability→ no such directory; noLogIncidentControlPlaneanywhere undersrc/ormemex/), so the Observability plugin and both halves of the actionable work — not writing during shutdown, and not reporting a shutdown refusal as a failure — are in MeshWeaver.Plugins.Core's half is the terminal vocabulary itself, and one of the three is now traced to a root: see #1186 / PR #5165 for the case where a store fault inside a query provider arrived downstream as a complete answer and was reported as a node that does not exist.
Relationship to #5087 — a SPLIT, and they should stay separate
Both tickets carry the footer "this incident inherited
a30c09f918c68632". Same ancestor fingerprint, same log site (Incident …: Comment could not write Admin/_LogIncident/…), same outer exception — the current identity function separated them. That is a split, not two independent faults.But they are split on the terminal, and #5087's (
InvalidOperationException: this hub's mirror ended without ever carrying the node's state— the mirror COMPLETED without state, fromWorkspace.AcquireRemoteStreamUnchecked) is distinct from all three above. So closing one into the other would bury a fourth root. Keep both, cross-referenced by terminal rather than by title. Recorded that way on #5087 too.Disposition
Leave open, re-scoped: this is a reporting/classification ticket whose largest visible share is a shutdown-time write, and the work is in MeshWeaver.Plugins. It should be SPLIT per terminal rather than fixed as one thing.
sev:Lstands — the writes are retained and retried, so the cost is delayed annotations.What I did NOT establish
mainthatLogIncidentControlPlanestill issues writes during shutdown; that the terminal reaches it is established from the log line, the caller's behaviour is not.Grouping method committed as
Doc/Architecture/OneLogSiteManyTerminals(PR #5170).rbuergi commentedon Sep 22, 2026
Follow-up: core already gives the caller everything needed to classify the shutdown share, so that half is a Plugins defect by measurement, not by elimination
My previous comment said the
Host is shutting downshare — 6 of the 10 retained samples — is a caller defect. Here is why that is a measured statement rather than "it is not in core".The sentence is produced by the routing layer and is already classified transient
src/MeshWeaver.Connection.Orleans/OrleansRoutingService.cs:428and:606are the only producers ofHost is shutting down, cannot route to {address}. Andsrc/MeshWeaver.Messaging.Contract/ShutdownNack.csis a whole type devoted to making these refusals machine-readable. It states the contract in its own words:and it distinguishes the two speakers explicitly:
So core provides three separate things a caller can use, all of them already wired:
ErrorType.ShuttingDownviaOrleansRoutingService.ClassifyRoutedFailureShutdownNack.IsAnsweredByOwner, derived fromShutdownNack.Bannerrather than from an enumeration of sentences (the lesson of #3017)ShutdownNack.ReactivationPromise— present on an owner-side refusal, deliberately absent from the host-shutdown routing refusalThat third row is the operationally important one for this ticket: a host shutting down promises nothing about reactivation, so the correct caller behaviour is stop issuing, not retry — and a
LogIncidentControlPlanereconcile that keeps writing into a stopping host and then reports each refusal atErroris minting incidents on the way down with a vocabulary available to tell it not to.What that settles and what it does not
Settles: there is no core gap behind the shutdown share. The classification exists, is documented as contract, and is consumed by three named classifiers. The fix is for the caller to consult it — which is in MeshWeaver.Plugins, where
LogIncidentControlPlanelives (src/MeshWeaver.Observabilityis absent from core;grep -rn LogIncidentControlPlane src memexfinds nothing).Does not settle: I did not read
LogIncidentControlPlane, so I have not seen what it does with the classification today — only that the classification is there to be read. And this covers one of the three terminals folded into this ticket. TheBaseStateTimeoutExceptionshare and the Npgsql share are untouched by it, and the first of those is the one whose own message says all three of activation, routing and the initial read stay in scope.Nothing here changes the disposition: leave open, re-scoped, split per terminal.
rbuergi commentedon Sep 22, 2026
Correction to my own comments: the occurrence count here measures the LOG LINE, not an unrepaired failure
Flagged by a session working
area:ai, and it applies to this log site squarely — sharper than the caveat I wrote.mainnow carries the doc for the general pattern:Doc/Architecture/AFaultDoesNotStateTheVerdict— "a fault logged at Error claimed the outcome a later branch decides, so once a recovery path was added every benign blip filed a red line asserting held rollouts."Why it applies here, from this ticket's own text
The log line is emitted at the refusal, and it says so in the same sentence:
So the
Erroris written at a point where the outcome is not yet decided — the retry is a later branch. And this ticket's own Impact section records that the retry worked in the reported case: "the request was retained, the target incident node was written successfully again ~90 seconds later, and the control plane created this incident's own node seconds after that — mesh writes were healthy again immediately."So an occurrence is a refused ATTEMPT that was probably then retried and probably then landed. It is not a lost annotation, and the count is not a count of damage.
What that changes, and what it does not
Changes: any reading of the form "N occurrences, so this is still broken" is unsound at this log site, in both directions. A fixed root can keep this counter climbing for ever if anything still produces one transient refusal, and a recurrence check that reopens on the counter is reading the log statement's position in the code, not the defect. My earlier comment said the count cannot verify a fix; the stronger and more useful statement is that it cannot establish breakage either.
Does not change: the grouping, or the disposition. Reading the retained samples' inner exceptions is unaffected — that tells you which terminals this fingerprint folds, which is a fact about the code paths reached, not about outcomes. And it does not soften the classification finding; it strengthens it. An
Errorline written before the retry that repairs it is precisely a fault claiming a verdict a later branch decides, which is the defectAFaultDoesNotStateTheVerdictnames. The right report here is one that either waits for the retry's outcome or states plainly that it is reporting an attempt.What I did NOT establish
LogIncidentControlPlane(MeshWeaver.Plugins — absent from core), so I have not seen where itsLogErrorsits relative to the retry, only that the message it emits asserts an outcome the retry can change. Thearea:aifinding is about[ThreadExec], a different site with the same shape; I am applying the pattern, not a measurement of this one.Host is shutting downterminal) is a sample proportion of the retained ring and is unaffected by this: it counts which code path was reached, not whether the write eventually landed.docs: a count whose log statement precedes the recovery branch establ…
rbuergi commentedon Sep 24, 2026
Two of the three terminals now have a merged fix. Both are awaiting roll.
Per terminal, following the split recorded above:
MeshNodeStreamException: Host is shutting down, cannot route to …(6 of 10 retained samples)LogIncidentControlPlane.Runstarts no transition oncehub.IsLeaving()is true (hub shutting down, orApplicationStopping). The request stays on the node for the replica that replaces this one. Any recoverable failure after the host began leaving (a reconcile, or a failure before the claim) records nothing and reports at Information. A stranded transition stays Error. TestALeavingHostStartsNoIncidentWriteTesthas two negative controls.LogIncidentUnwritableIncidentTeststill shows Error on a host that is staying.BaseStateTimeoutException, "NO change item at all reached the mirror", 30 s9dba8f8744). A grain on a stopping silo answered within about 1 ms, and its own router refused the answer, so the subscriber waited out 30 s. It now refuses and hands off withMigrateOnIdle. The retained samples fit that: 2026-09-17 14:25:47Z ond77fd7c88-x7nzmcomes one minute after that pod's own shutdown refusals, and 2026-09-20 07:25:00Z on78c786fcf6-bs4fncomes 30 s after65f8c68995-z27tqbegan refusing. Both are roll windows.TimeoutException(2026-08-30)Deployed state, measured now (
/api/version):9a61fed96439f49494ebBoth predate
9dba8f8744, and no image carries Plugins#2340 yet, so every share is awaiting roll.How to verify after the roll. Per the earlier comment, this counter cannot verify any fix. The check is per terminal: no
Host is shutting downterminal at this log site, and no roll-windowBaseStateTimeout, in samples from a replica that carries both fixes.Not established: I matched the
BaseStateTimeoutsamples to roll windows by timestamp only. I did not read the owner silo's stop time for them. I also did not verify the body's note that a quiet incident may never be retried; that is unchanged by this work.rbuergi commentedon Sep 24, 2026
Post-roll sweep 2026-09-24 ~06:50Z: the fix is not live on either portal yet
What is running.
/api/versionreturns9a61fed964.Ops/Status/memex-cloud(06:42:00Z) shows 4/4 replicas on3.0.0-ci.9263. CD run 9263 built core9a61fed964with Plugins41bcfe968f./api/versionreturns39f49494eb.Ops/Status/memexshows the serving pods on3.0.0-ci.9218, which is core39f49494ebwith Pluginse9d9283abe. A third pod, onci.9260, is unready, so the roll isconverged: false.This issue's fix: Plugins#2340 (
68906340af). It is not an ancestor of either running build (git merge-base --is-ancestor, exit 1).Where it is.
3.0.0-ci.9287(CD run35956222018) is corebf5ac85526with Pluginsc4795a8d5b, and it contains this fix. The registry has sealed it. memex-cloud's self-updater logged[SelfUpdate] handing 3.0.0-ci.9287 to the control lane (https://memex.systemorph…)at 06:47Z. So the roll now waits on the control instance, which is an owner step and was not done here.Still open. It closes on a post-roll reading once a
ci.9287-or-later image serves the namespace this fingerprint fires in.rbuergi commentedon Sep 24, 2026
Post-roll reading on memex-cloud: quiet there, but this fingerprint's home is memex, which still runs pre-fix code
Image. memex-cloud (memex.meshweaver.cloud) serves
3.0.0-ci.9291./api/versionreturns core140c5fb7ae, andOps/Status/memex-cloud(sampled 14:49Z) shows all 4 replicas on that tag,converged: true. The Plugins half isb3601fecbe: the portal-ai build job of CD run 35970157348 (job 107542528900) logsHEAD is now at b3601fe. The first pods of this ReplicaSet (memex-portal-deployment-589ff8f895) started at 08:41:05Z and 08:42:17Z. More pods of the same ReplicaSet, on the same image, joined later (gqsfn at 14:06Z, vw5jj at 14:10Z, and others). The control instance memex.systemorph.com still serves core39f49494eb.Window and method. I ran
LogsInstanceActions on memex.meshweaver.cloud between 14:43Z and 14:54Z, withsinceMinutes370/375, filtered to this ReplicaSet with| pod=~"memex-portal-deployment-589ff8f895-.+". That is ≥ 6 h of this image only, from 08:41Z to about 14:50Z. Coverage control:Ops/logs-memexcloud-20260924-close6h-c-bootcoverage(warm-up complete) lands 9 lines from 9 pods of this ReplicaSet. The earliest are ghgjt, vn49b and tp564 at about 08:51Z, so the window reaches back to the first boots.Fix: Plugins#2340 (
68906340af). It is in memex-cloud's image. It is not in memex's, which runs core39f49494eb+ Pluginse9d9283abe(merge-base --is-ancestorexit 1).|~ "(?i)IncidentWriteFailedException|could not write Admin/_LogIncident"(Ops/logs-memexcloud-20260924-close6h-f-incidentwrite)|~ "(?i)LogIncidentControlPlane"(…-c-logincident): 9Every recorded occurrence was on memex, so the memex-cloud zero is supportive only and does not verify the fix. Stays open until memex runs an image containing the fix and a ≥ 6 h reading there is clean.
rbuergi commentedon Oct 8, 2026
Not closable yet. The BaseStateTimeout terminal (the per-node hub's mirror never got an initial snapshot) recurred 9 times on 2026-10-05 16:26–23:37Z on fixed images (pods
6cfcf78898-gkkdv,f86c77f48-twzk9), under the new fingerprintf1e8bef1a3761721folded into #5478. A Host is shutting down write also hit the stranded path on 2026-09-27 06:27Z (15e59ffbf98b9794), where the request was already consumed. The identity change moved the counter to other fingerprints, so this one going quiet verifies neither fix. Related, not a duplicate: #5087 (closed, fixed by #5640).sev:L sweep, Claude Opus 5.5 (agent session).
rbuergi commentedon Oct 11, 2026
Still occurring as of today. Stays open; this is now the only open issue for this terminal.
Where the count went. The incident identity changed, so this fingerprint (
c94d1352613d70de) went quiet while the same line kept firing underf1e8bef1a3761721, which files into #5478. #5478 is closed. So the recurrences below are being commented onto a closed issue, and this one is the open record.Reading —
Admin/_LogIncident/f1e8bef1a3761721, memex.systemorph.com, 2026-10-11 ~11:20Z. 34 occurrences, first 2026-10-05 16:26Z, last 2026-10-11 03:57:20Z, namespace memex, 7 pods. Every sample is theBaseStateTimeoutExceptionterminal ("NO change item at all reached the mirror inside the bound", 30 s). The retained samples fall in two clusters:5f6b9fc9b-hrdhq,845898d964-f6wm5,-ptszc,-mwzl7)6749fbfc59-hdlgz)node kernel connect failed (Error: connect: no ack within 30s)from that podAdmin/_LogIncident/254804a0aad8b746([ROUTE] Directed delivery to pod hub … failed — surfacing Failed DeliveryFailure,TimeoutException) was last written at 04:14:53Z, the same second as this incident's node, so the watcher folded both in one pass. I did not open it to compare its sample times with the second cluster.What that points at, and how far. The pods named are the WRITERS (the line is logged by the caller). In the second cluster the writer itself was impaired: it could not reach its own node kernel in the same seconds. In the first, four writers on two ReplicaSets failed within a minute. Neither looks like one incident node failing to hydrate from a healthy store; both look like a process-level stall or a roll. Which pod OWNED the incident hubs in either cluster is not in these samples. The Npgsql and Host is shutting down terminals from the earlier split do not appear in these samples. That is a reading of ten retained samples, not of the 34 occurrences.
Not established:
hdlgzwas stalled at 03:55Z, and by what (GC, thread pool, or a wedged turn). I could not read its log: the log store refused my fourLogsactions today with429 too many outstanding requests(ProvisionPlan log-ingestion run drops user identity on write-back (0 of 47 entries landed) and its Loki query phase also times out / hits 429 #5717; A LogStore pool: range reads against the log store run one at a time per process #6481 addresses that).Next reading, once the log store answers:
{namespace="memex",pod="memex-portal-deployment-6749fbfc59-hdlgz"}for 2026-10-11 03:50Z → 04:00Z, looking forPlatform stalled,thread pool execution stalledand the pod-hub delivery timeouts.Fleet issue wave, Claude Opus 5.5 (agent session).
rbuergi commentedon Oct 11, 2026
The "next reading" is taken: no incident hub failed to hydrate. Both clusters are a wedged silo (#6432), and the Error line is fixed in Systemorph/MeshWeaver.Plugins#3383
The log store answered today. Two governed
Logsactions on the control instance, both read-only:Ops/Actions/w21-4962-memex-hdlgz-0355-bandOps/Actions/w21-4962-memex-ptszc-1009-2043.Cluster 2 — 2026-10-11 03:55Z, writer
6749fbfc59-hdlgz. The subscribe never left the writer's pod.[STALE-CALLBACK] cache/WeXQmrBhRESqawZSwzPp6Q: theSubscribeRequestforAdmin/_LogIncident/31f12aedfc4bbbc8has the trailPOSTED → RECEIVED runLevel=Started → ENQUEUED → QUEUED queue=main depth=182, all on the pod's owncache/…hub, and nothing after it. NoROUTED, so the turn that would forward it had not started more than 30 s later.SubscribeRequestin the same state atdepth=153, 53 s old. The queue grew and did not drain.pool threads=24 pendingWork=0, so this is not pool starvation.[UpdateRemote] ERROR … type=BaseStateTimeoutException, then theIncidentWriteFailedExceptionline.Response did not arrive on time in 00:00:30 … messagehub/Provider/_Activity/import-manifest … executing for 00:00:25at 03:55:01Z and the CreateNode lifecycle stalls at the validators stage with no verdict — a validator never answers within its window during the platform-startup boot-activity create #6391 create stalls at 03:53–03:58Z.Cluster 1 — 2026-10-09 20:43Z, writer
845898d964-ptszc. The owner was on the writer's own pod, and it was not the store.[UpdateQueue] FAILED path=Admin/_LogIncident/90565fcee7617b58at 20:41:07Z, 20:42:07Z, 20:43:09Z and 20:43:49Z.ptszcitself:Dropping UnsubscribeRequest for stream … on hub Admin/_LogIncident/90565fcee7617b58: no synchronization hub found … never-created sync hub, six of them. So the incident's hub was hosted onptszc, and the subscribes it was sent had created no stream by the time their unsubscribes arrived.5f6b9fc9b-hrdhq, the other writer in this cluster, was booting at 20:36Z (CreateNode lifecycle stalls at the validators stage with no verdict — a validator never answers within its window during the platform-startup boot-activity create #6391's first sample) and evicted at 20:44:12Z (Healthy Orleans silo falsely voted dead by peers and terminated itself during cluster roll-churn #6395).What that settles. For the terminal this issue still has open (
BaseStateTimeoutException, "NO change item at all reached the mirror"):Both are a silo that accepts work and dispatches none of it. #6432 has the dump: a convoy on the container's shared-instance lock, with
MeshNodeStreamHandle.UpdateRemoteand the grain activation's configuration resolve among the waiters. That is the root cause of these 34 occurrences, and it is tracked and being worked there (#6455 merged, #6490 open). Nothing in the write path can produce a NACK while the thread that would post it is parked on that lock, so there is no bound to change here.What was this issue's own defect, and is now fixed in Systemorph/MeshWeaver.Plugins#3383. The control plane reported a write it re-attempts by design at
Error. Each attempt became an incident and a recurrence comment about a write that then landed. A recoverable write failure is now aWarning. TheErroris an incident still unwritable after five minutes, once per outage, also raised by the comment-debt clock for an incident nothing re-attempts. That last part answers the body's open note about a quiet incident. A stranded transition staysError. Tests:ARecoverableIncidentWriteFailureIsNotATicketTest; with the two lines put back toLogError, 6 of 8 cases fail.Why the recurrences landed on closed #5478. By design, not a bug: one log site folds into one ticket (
siteFold 8ba036a09364b28a), that ticket was #5478, and a ticket closed as a duplicate is left closed and commented (LogIncidentFiler.CloseReasonThatOutranksTime). #5478 was closed as a duplicate of #5315 for a different terminal of the same site (the provider stall). The Plugins change removes the source: these attempts no longer file at all.Not established.
ptszc's incident hub was waiting on at 20:41–20:43Z. It came unstuck 23 s beforehrdhqwas evicted; that is a correlation.cache/…hub's running turn onhdlgzwas blocked in. The dump on Silo 5j9gx marked Dead by peers 26s after its last heartbeat and terminated itself — recurrence of the false-positive membership kill (#3053) #6432 is from another pod.gkkdv,twzk9) were not re-read; Triage reconcile cannot record results on log incidents when storage query providers stall past the fan-in timeout #5478 records them as GC-bound and as a forwarded subscribe with no handler run.Disposition. Stays open until #3383 is on memex: the check is that no
could not write Admin/_LogIncidentline appears atfail:there outside a stranded transition. The wedge itself closes on #6432.Fleet issue wave, Claude Opus 5.5 (agent session). Read-only on the deployment.
rbuergi commentedon Oct 11, 2026
Still owed (2026-10-11 19:55Z): Plugins#3383 is not in the running image (
3.1.10565carries Plugins95439f8). It is in3.1.10570(Plugins4b87135), which is in CD now. You can check it after that roll: a recoverable incident write failure should log at Warning and file nothing here.rbuergi commentedon Oct 13, 2026
Closing: the fix is merged and live, and the incident has not moved in more than three weeks.
3.1.10570, and memex now runs3.1.10716(coreec7763883b).Admin/_LogIncident/c94d1352613d70de, the identity this issue was filed from (IncidentWriteFailedException), read on memex.systemorph.com 2026-10-13 ~15:12Z:lastModifiedis 2026-09-20 07:27Z. No occurrence has been recorded since, across roughly 30 boots in the last 24 h alone.Not separately measured: a
Logsread ofLogIncidentControlPlaneover 24 h (Ops/Actions/wmlb-4962-memex-incidentwrite-24h) was cut at 200 lines. That logger is busy with ordinary work, so I did not use the read as a zero. The incident record is the instrument here.