Reading a Recurrence Reopen

The recurrence bot reopens a closed incident issue and writes "Reopened — this fault is happening again." That sentence carries two claims, and they fail independently:

  1. the fault was seen after the close — otherwise the reopen reverses a person's judgement on evidence that person already had;
  2. the fault was seen recently — otherwise "again" is a statement about a counter, not about the system.

Only the first has a fix in flight (MeshWeaver.Plugins#2014: issue.ClosedAt is { } closedAt && incident.LastSeen > closedAt). The second is unwritten, and it is the one that mattered on 2026-09-17.

The wave, and its residue

Between 07:51:00Z and 07:53:59Z on 2026-09-17 the bot reopened a burst of closed core incident issues. It is filed twice — #4577 (~130 across a wider 07:45–07:55Z window, backlog 43 → 164) and #4610 (~51 in the narrow one, backlog 46 → 97).

🚨 Those are ONE burst measured at two times, not two waves — do not add them. #4577 was written at 08:54Z and #4610 at 15:37Z, and #4610's window sits inside #4577's; the backlog figures differ because re-closing had been going on in between. A third reading at ~17:30Z finds 102 open and 51 from the burst — which matches #4610's count exactly, by a different instrument (it counted updated_at inside 07:40–08:15Z; this counts reopened events). Reading the two tickets as ~181 issues of damage overstates it by roughly threefold.

Denominator, measured 2026-09-17T~17:30Z: of core's 102 open issues, 51 carry a reopened event inside that three-minute burst. Every one of the 51 was closed before 2026-09-17 — 50 by rbuergi, 1 by github-actions[bot] — so all 51 are in scope, and the rest of the wave has already been unwound by earlier sessions.

Eight further issues carry a 2026-09-17 reopen outside the burst (#2387 05:33, #4222 06:42, #4326 08:54, #3712 09:13, #1198 11:04, #1840 13:55, #1561 16:04, #1140 16:06). #1198 was reopened by a human, not the bot. None of the eight is part of the wave and none was touched.

The finding: the residue passes the first predicate, 51 out of 51

Taking, per issue, the bot's own Last seen: from the very comment it posted alongside the reopen, and the closed event that reopen reverted:

count
newest occurrence at or before the close — the reopen was wrong 0
newest occurrence after the close — the reopen was, on that test, right 51

So the residue of this wave is already clean by Plugins#2014's rule, which is the only rule that authorises re-closing. Nothing here may be re-closed on the evidence available, and nothing was. That is not the same as saying the 51 are live.

The second axis: how old is the evidence?

Measuring the newest occurrence any comment on the issue reports, against the reopen instant:

bucket count what it means
seen today, after the reopen itself 3 genuinely live — the fault is happening now
seen within 7 days of the reopen 7 recently live; quiet for 5–7 days
quiet for 8–37 days at the reopen 41 "again" is a statement about a counter

The oldest is 37.4 days (#1112, #1135 — last seen 2026-08-10, reopened 2026-09-17). That is the dishonesty in the count, and no close predicate anybody has proposed reaches it: these faults were seen after their close, and then stopped.

The honest triple

number value basis
wrongly reopened and re-closed 0 0 of 51 have a newest occurrence at or before their close
genuinely recurring 3 (+7 within a week) newest occurrence 2026-09-17, on the running pod
awaiting delivery 0 in this wave every close in the wave predates both running images

Awaiting delivery is empty here by construction. The newest close in the population is 2026-09-08T21:04Z, while memex.systemorph.com runs afde4ea (2026-09-15 21:50Z) and memex.meshweaver.cloud runs c84c6c0 (2026-09-12 09:30Z). Every fix that closed a wave issue is in both running images by at least four days, so no wave issue can be excused as delivery lag. (Whether a given close carried a fix at all is a separate question, answered per issue below; the delivery argument only establishes that if there was one, it is running.) The genuine awaiting-delivery cases on 2026-09-17 are the two reopened outside the wave whose fixes merged on 2026-09-16, after both images: #4616 and #4464.

The three that are live

Each has an occurrence on 2026-09-17, reported from memex-portal-deployment-6c967c7c4c-* — the currently-running replica. 🚨 What each close actually asserted differs, and that decides what the recurrence means — so the three are listed with their closing verdict rather than lumped together:

issue closed seen today at what the close asserted so a recurrence today means
#1549 2026-08-21 21:12:33Z 2026-09-17 11:11:00Z "the defect this issue converged on is fixed and deployed", residual named a delivered fix did not hold, or the named residual is what is firing
#2299 2026-08-26 07:22:28Z 2026-09-17 11:28:58Z nothing — a bare close, no comment, no linked fix the fault was never established as fixed; this is the first evidence either way
#2765 2026-08-30 18:43:43Z 2026-09-17 14:25:47Z "a single transient with no code defect identified, and the retry model worked" the "single transient" premise is falsified — the record now stands at 1,069

These three are the wave's entire signal. Reading the reopen wave as noise loses them; reading it as 130 regressions buries them.

🚨 And "recurring against its own fix" is a claim to check per issue, not a property of the bucket. Only #1549's close carried a stated, deployed fix; #2765's close explicitly identified no code defect, and #2299's carried no verdict at all. A live occurrence is a live occurrence either way — but only one of these three is evidence that a fix failed.

The third predicate nobody has written: the close races the roll

🚨 15 of the 51 have their ONLY post-close evidence within 17 hours of the close, and nothing in the 8–37 days since:

#2152 (+0.0 d) · #3466 (+0.0 d) · #2171 (+0.1 d) · #2182 (+0.1 d) · #2679 (+0.1 d) · #3051 (+0.2 d) · #2444 (+0.3 d) · #1112 (+0.4 d) · #1135 (+0.4 d) · #1175 (+0.4 d) · #2233 (+0.5 d) · #3647 (+0.5 d) · #2153 (+0.6 d) · #2876 (+0.6 d) · #3126 (+0.7 d)

Measured: the gap, and the silence after it. Inferred, not measured: that these are the old replicas still emitting between the merge that closed the issue and the roll that delivered it — a fix closes its issue when it merges, while the pods keep running the previous image for hours. Confirming it needs a pod→image mapping the incident comments do not carry.

If that reading is right, the predicate is not "was it seen after the close" but "was it seen on an image that contains the fix" — and it would take these 15 out of the wave without weakening the rule for the three that are live. It also explains why Plugins#2014's predicate, which is correct, leaves a residue that still reads wrong: a close and a delivery are different events, and the reopen rule compares against the earlier one.

How to read one, until both predicates exist

Appendix — the 51, one row each

A negative age means the newest occurrence is NEWER than the reopen: the fault carried on after the bot reopened the issue.

Live — seen 2026-09-17 (3)

issue closed at Last seen the reopen cited after the close by newest occurrence on the issue age of that at the reopen
#1549 2026-08-21 21:12:33 2026-09-06 22:39:32 +16.1 d 2026-09-17 11:11:00 -0.1 d
#2299 2026-08-26 07:22:28 2026-09-02 19:26:24 +7.5 d 2026-09-17 11:28:58 -0.2 d
#2765 2026-08-30 18:43:43 2026-09-08 03:29:51 +8.4 d 2026-09-17 14:25:47 -0.3 d

Recently live — quiet 5–7 days at the reopen (7)

issue closed at Last seen the reopen cited after the close by newest occurrence on the issue age of that at the reopen
#3556 2026-09-08 05:46:47 2026-09-10 07:04:06 +2.1 d 2026-09-10 07:04:06 7.0 d
#2357 2026-08-29 08:24:29 2026-09-10 12:26:14 +12.2 d 2026-09-10 12:26:14 6.8 d
#2321 2026-08-30 06:55:28 2026-09-10 14:35:02 +11.3 d 2026-09-10 14:35:02 6.7 d
#1109 2026-08-10 12:19:23 2026-09-10 19:08:27 +31.3 d 2026-09-10 19:08:27 6.5 d
#2231 2026-08-25 19:25:54 2026-09-11 18:55:35 +17.0 d 2026-09-11 18:55:35 5.5 d
#1449 2026-08-13 21:20:28 2026-09-12 03:12:14 +29.2 d 2026-09-12 03:12:14 5.2 d
#1910 2026-08-21 00:18:50 2026-09-12 08:28:48 +22.3 d 2026-09-12 08:28:48 5.0 d

Quiet 8–37 days at the reopen (41)

issue closed at Last seen the reopen cited after the close by newest occurrence on the issue age of that at the reopen
#1112 2026-08-10 12:19:30 2026-08-10 22:28:20 +0.4 d 2026-08-10 22:28:20 37.4 d
#1135 2026-08-10 13:47:00 2026-08-10 22:28:57 +0.4 d 2026-08-10 22:28:57 37.4 d
#1175 2026-08-10 21:14:36 2026-08-11 07:06:33 +0.4 d 2026-08-11 07:06:33 37.0 d
#1127 2026-08-10 20:40:22 2026-08-13 16:23:01 +2.8 d 2026-08-13 16:23:01 34.6 d
#1541 2026-08-14 15:13:23 2026-08-17 03:30:19 +2.5 d 2026-08-17 03:30:19 31.2 d
#1310 2026-08-12 19:49:55 2026-08-23 20:13:56 +11.0 d 2026-08-23 20:13:56 24.5 d
#1142 2026-08-10 13:47:02 2026-08-24 07:44:21 +13.7 d 2026-08-24 07:44:21 24.0 d
#2152 2026-08-25 19:08:18 2026-08-25 20:10:27 +0.0 d 2026-08-25 20:10:27 22.5 d
#2182 2026-08-25 19:08:39 2026-08-25 20:36:24 +0.1 d 2026-08-25 20:36:24 22.5 d
#2171 2026-08-25 18:39:49 2026-08-25 22:13:09 +0.1 d 2026-08-25 22:13:09 22.4 d
#2233 2026-08-25 18:24:25 2026-08-26 06:58:49 +0.5 d 2026-08-26 06:58:49 22.0 d
#2153 2026-08-25 19:08:33 2026-08-26 10:06:46 +0.6 d 2026-08-26 10:06:46 21.9 d
#2444 2026-08-28 13:38:36 2026-08-28 20:24:59 +0.3 d 2026-08-28 20:24:59 19.5 d
#2381 2026-08-26 19:34:25 2026-08-29 23:30:08 +3.2 d 2026-08-29 23:30:08 18.3 d
#2679 2026-08-30 07:25:13 2026-08-30 09:59:10 +0.1 d 2026-08-30 09:59:10 17.9 d
#2358 2026-08-26 15:03:44 2026-08-30 11:55:23 +3.9 d 2026-08-30 11:55:23 17.8 d
#1300 2026-08-12 22:12:58 2026-08-30 15:02:37 +17.7 d 2026-08-30 15:02:37 17.7 d
#2633 2026-08-30 00:37:42 2026-09-01 08:36:17 +2.3 d 2026-09-01 08:36:17 16.0 d
#2322 2026-08-30 08:58:51 2026-09-02 03:12:15 +2.8 d 2026-09-02 03:12:15 15.2 d
#2884 2026-08-31 06:39:52 2026-09-02 03:12:45 +1.9 d 2026-09-02 03:12:45 15.2 d
#1203 2026-08-12 06:58:08 2026-09-02 08:46:16 +21.1 d 2026-09-02 08:46:16 15.0 d
#3051 2026-09-02 07:24:03 2026-09-02 11:17:43 +0.2 d 2026-09-02 11:17:43 14.9 d
#2876 2026-09-02 01:07:34 2026-09-02 14:39:36 +0.6 d 2026-09-02 14:39:36 14.7 d
#1284 2026-08-21 12:12:43 2026-09-03 07:30:08 +12.8 d 2026-09-03 07:30:08 14.0 d
#1547 2026-08-14 15:13:25 2026-09-03 07:27:47 +19.7 d 2026-09-03 07:27:47 14.0 d
#2307 2026-08-26 07:22:28 2026-09-03 08:10:17 +8.0 d 2026-09-03 08:10:17 14.0 d
#2228 2026-08-25 18:24:23 2026-09-03 16:09:15 +8.9 d 2026-09-03 16:09:15 13.7 d
#3126 2026-09-02 20:51:58 2026-09-03 14:13:23 +0.7 d 2026-09-03 14:13:23 13.7 d
#1540 2026-08-14 15:13:22 2026-09-03 17:21:25 +20.1 d 2026-09-03 17:21:25 13.6 d
#1548 2026-08-14 15:13:22 2026-09-03 17:21:23 +20.1 d 2026-09-03 17:21:23 13.6 d
#1897 2026-08-19 20:26:47 2026-09-03 17:21:23 +14.9 d 2026-09-03 17:21:23 13.6 d
#1899 2026-08-19 20:26:48 2026-09-03 16:31:06 +14.8 d 2026-09-03 16:31:06 13.6 d
#2132 2026-08-25 18:05:12 2026-09-03 17:12:34 +9.0 d 2026-09-03 17:12:34 13.6 d
#2480 2026-08-28 11:34:25 2026-09-03 17:51:10 +6.3 d 2026-09-03 17:51:10 13.6 d
#1200 2026-08-12 10:15:12 2026-09-04 13:33:26 +23.1 d 2026-09-04 13:33:26 12.8 d
#1253 2026-08-12 12:22:46 2026-09-06 05:54:48 +24.7 d 2026-09-06 05:54:48 11.1 d
#3235 2026-09-04 08:19:19 2026-09-06 16:16:53 +2.3 d 2026-09-06 16:16:53 10.6 d
#3466 2026-09-06 22:10:21 2026-09-06 22:25:37 +0.0 d 2026-09-06 22:25:37 10.4 d
#2833 2026-09-01 20:02:08 2026-09-08 09:39:42 +6.6 d 2026-09-08 09:39:42 8.9 d
#3647 2026-09-08 21:04:20 2026-09-09 10:06:06 +0.5 d 2026-09-09 10:06:06 7.9 d
#3516 2026-09-08 07:38:47 2026-09-10 06:10:52 +1.9 d 2026-09-10 06:10:52 7.1 d

Method

Read-only over the GitHub REST API: /issues?state=open (paginated, pull_request filtered out), then per issue /issues/{n}/events for the close/reopen pair and /issues/{n}/comments for the bot's own Last seen:. Last seen is taken from the reopen comment for the first axis and from the newest comment of any kind for the second, so a fault that resumed after the reopen is counted as live. Running images read from /api/version on both portals. No issue in the wave was closed, reopened, commented on or labelled.

See also

Reconnecting…
The connection to the server was interrupted. Trying to restore it…
Trying again…
The connection could not be restored. Reloading the page…
The server was updated. Reloading the page to pick up the latest version.