Skip to content

Flake: ActivityLiveProgressTest.EveryProgressLine_LandsWhileTheCommandIsStillRunning — the activity node's owner ends its streams ~5 s in, the next progress write gets no verdict (OwnerUnreachable after 31 s) #2776

Description

@rbuergi

Observed

2026-08-30 13:28Z on #2774 (a one-line change to deploy/homebrew/scripts/make-tarball.sh — its diff cannot reach a GitSync activity test), shard 5, run https://github.com/Systemorph/MeshWeaver/actions/runs/33313654005/job/99263942522, commit 2abb6a60. main's three preceding Build-and-Test runs (41dd85a2, ead524e9, 2ead7832) are green.

MeshWeaver.GitSync.Test.ActivityLiveProgressTest.EveryProgressLine_LandsWhileTheCommandIsStillRunning [FAIL]
Assert.Equal() Failure: Expected: Succeeded  Actual: Failed
[CI] MeshWeaver.GitSync.Test exit=1 TESTFAIL (the host completed normally)

Mechanics, from the test's own output (activity GhLive22d6da4e6/_Activity/b55c9a35, cache hub cache/6D99IQwI1U23HtKNOUtrNw)

t what
13:28:27.815 TEST START
13:28:32.936 [DataExtensions] Dropping StreamEndedEvent for stream uZzjE4MWi0KBrSXTSLNN9g … no synchronization hub found on this hub or any parent — the target stream is gone (sender: the activity node)
13:28:32.940 [MeshNodeStreamCache] [UpdateQueue] ADVANCE_WITHOUT_HANDOFF path=…/_Activity/b55c9a35 seq=3 bound=5000ms — the owner never acknowledged this write inside the bound
13:28:32.946 a second Dropping StreamEndedEvent (stream dPb18nIfvUCsJEhA8RgoLQ), same sender
13:28:58.951 [MeshNodeStreamHandle] [UpdateRemote] VERDICT_TIMEOUT … bound=31s — the owner produced no terminal for this patchMeshNodeStreamException: MeshNode OwnerUnreachable
13:28:58.952 [ActivityRunner] Activity … failed → status Failed → the assertion

So: the activity's per-node hub ENDED its two sync streams ~5 s after the run started — while the activity was still running and its second progress line (seq=3, "step two") was queued — and every later write to it timed out. The request trail is REGISTERED_AFTER_POST (Observe(delivery) overload), i.e. the caller registered after posting, so the trail cannot say where the patch went; the cache's own comment names that overload as the one to switch away from (Observe(request, options)) to get a full trail.

Open questions (the RCA this issue exists to hold)

  1. What ended the activity node's streams at +5 s? The activity was mid-run (the test's callback was still waiting on ObserveMessage("step one")). Candidates: a recycle of the activity's per-node hub (cf. fix: Recycle must land its recompile trigger BEFORE it disposes the hub #2763 — a Recycle disposing the hub before its trigger landed; fix: a recycle now reaches the subscribers it orphans (#2551) #2582 — a recycle reaching the subscribers it orphans), or the bounded-message-list flush (d1a239a6d) re-homing the activity's messages while a write is in flight. Neither is proven here.
  2. Why does the caller not learn it earlier? ADVANCE_WITHOUT_HANDOFF fires at 5 s, the verdict timeout at 31 s — 26 s of a write that the cache already knew had no acknowledged owner.

Not done

No re-run was requested on #2774 for this; the branch is being merged with main (it is behind twice over), which re-runs CI as triage, not as an answer. This test has no prior issue — gh issue list --search ActivityLiveProgressTest returns nothing — so this is its first recorded occurrence.

Activity

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions