xarmian
2b33184ef1
fix(metrics,watchevents,server): three codex round-1 findings (BUG-2727)
...
1. pad_redis_up was registered unconditionally, so a deployment with no
Redis exported a permanent 0 — which reads as "Redis is down" to
anything scraping it and would have every single-process binary
alerting on a dependency it does not have. It now registers only
inside the PAD_REDIS_URL branch, matching /health/ready, which already
omitted its redis block on the same condition. My own field comment
claimed the absent behaviour while the code did the opposite.
2. The receive loop could report a false exit during shutdown: Close
cancels the context AND closes the pubsub, and Go picks between ready
select cases at random. A context re-check makes the outcome
independent of that.
Scope stated honestly, because it is narrower than the finding
implies. With the guard removed, 200 Close cycles under publish
traffic produced zero false exits — and removing it AND reversing
Close's ordering still produced none, because Close waits on the
receive goroutine and the goroutine observes the cancelled context
either way. So no test fails if these three lines are deleted, and
both the code comment and the test doc say so rather than implying
coverage that does not exist. It is kept as defence against a future
reordering, not as a fix for observed behaviour.
3. Corrupt session entries returned a list error without incrementing
the failure counter, so pad_session_presence_failures_total
under-reported precisely the case an operator is least likely to find
another way — a dead Redis is obvious, a corrupt row is not. Both
corrupt shapes now count. The non-string arm is unreachable through
MGET (Redis answers nil for a key holding a non-string value,
verified), so it is annotated as defensive and the test says no leg
drives it instead of quietly covering only the reachable one.
Test-power notes are measured, not asserted: the Close test catches
removal of the select's ctx case (mutation-verified) and does not
discriminate the guard.
Claude-Session: https://claude.ai/code/session_01JVDBKbgn3Xt7ndW1YoYd8X
2026-08-22 01:55:59 +00:00
..
2026-08-18 12:26:00 -04:00
2026-08-15 08:22:09 -04:00
2026-06-22 11:43:52 -04:00
2026-08-17 08:16:02 -04:00
2026-07-30 20:15:00 +00:00
2026-07-31 02:35:53 +00:00
2026-05-06 08:40:11 -04:00
2026-05-06 13:27:12 -04:00
2026-06-15 14:44:58 -04:00
2026-05-18 00:43:46 -04:00
2026-05-18 00:43:46 -04:00
2026-08-15 19:18:55 -04:00
2026-08-19 08:13:29 -04:00
2026-08-19 08:13:29 -04:00
2026-07-14 20:37:03 -04:00
2026-04-25 11:35:19 -04:00
2026-08-20 23:33:26 -04:00
2026-08-20 23:33:26 -04:00
2026-04-25 11:35:19 -04:00
2026-07-10 23:56:59 -04:00
2026-07-10 23:56:59 -04:00
2026-07-05 20:47:30 -04:00
2026-07-04 14:38:01 -04:00
2026-07-05 20:47:30 -04:00
2026-07-05 19:58:07 -04:00
2026-07-08 16:26:41 -04:00
2026-07-15 01:30:12 -04:00
2026-04-28 12:26:39 -04:00
2026-04-28 12:26:39 -04:00
2026-04-28 16:21:43 -04:00
2026-07-01 17:44:43 -04:00
2026-07-04 04:15:09 -04:00
2026-07-04 04:15:09 -04:00
2026-07-01 17:44:43 -04:00
2026-04-28 12:26:39 -04:00
2026-08-20 13:26:05 -04:00
2026-08-20 13:26:05 -04:00
2026-06-22 13:31:45 -04:00
2026-08-02 00:55:20 +00:00
2026-08-08 20:37:39 +00:00
2026-04-29 15:41:12 -04:00
2026-08-01 19:53:12 +00:00
2026-08-01 23:27:34 +00:00
2026-08-19 08:13:29 -04:00
2026-08-18 12:26:00 -04:00
2026-08-01 23:05:26 +00:00
2026-04-29 15:02:07 -04:00
2026-08-02 00:55:20 +00:00
2026-08-02 00:55:20 +00:00
2026-08-17 09:03:44 -04:00
2026-07-14 20:37:03 -04:00
2026-05-06 13:27:12 -04:00
2026-05-06 08:40:11 -04:00
2026-06-22 20:58:50 -04:00
2026-04-21 19:33:47 -04:00
2026-04-21 20:52:03 -04:00
2026-04-22 12:21:34 -04:00
2026-07-05 18:44:26 -04:00
2026-08-20 19:07:59 -04:00
2026-05-27 10:37:30 -04:00
2026-06-27 21:42:52 -05:00
2026-07-08 13:09:26 -04:00
2026-08-20 13:26:05 -04:00
2026-08-19 08:13:29 -04:00
2026-04-25 11:53:31 -04:00
2026-05-18 15:25:27 -04:00
2026-07-05 12:05:24 -04:00
2026-04-22 09:27:45 -04:00
2026-06-20 23:51:43 -04:00
2026-07-04 11:33:18 -04:00
2026-07-04 11:33:18 -04:00
2026-07-15 01:30:12 -04:00
2026-07-21 20:51:19 -04:00
2026-07-03 18:12:35 -04:00
2026-08-20 13:26:05 -04:00
2026-08-20 13:26:05 -04:00
2026-07-21 09:43:05 -04:00
2026-07-03 03:27:04 -04:00
2026-08-20 13:26:05 -04:00
2026-07-03 18:24:36 -04:00
2026-05-30 12:38:57 -04:00
2026-08-21 20:43:20 -04:00
2026-05-18 08:33:39 -04:00
2026-05-18 03:32:42 -04:00
2026-05-18 08:33:39 -04:00
2026-05-21 13:08:02 -04:00
2026-07-11 09:38:14 -04:00
2026-07-08 12:02:12 -04:00
2026-05-14 22:10:12 -04:00
2026-05-20 16:39:23 -04:00
2026-07-21 09:43:05 -04:00
2026-07-14 23:43:19 -04:00
2026-04-28 12:26:39 -04:00
2026-08-22 01:31:33 +00:00
2026-08-22 01:31:33 +00:00
2026-04-29 18:30:43 -04:00
2026-07-04 13:54:08 -04:00
2026-07-04 13:54:08 -04:00
2026-07-21 09:43:05 -04:00
2026-07-03 20:18:29 -04:00
2026-07-03 14:40:54 -04:00
2026-06-08 18:13:10 -04:00
2026-08-17 14:26:09 -04:00
2026-04-29 22:03:27 -04:00
2026-08-20 19:07:59 -04:00
2026-05-15 00:36:41 -04:00
2026-05-15 00:36:41 -04:00
2026-07-03 23:47:06 -04:00
2026-04-28 12:26:39 -04:00
2026-08-20 23:33:26 -04:00
2026-08-17 19:02:53 -04:00
2026-07-21 18:00:49 -04:00
2026-08-20 23:33:26 -04:00
2026-08-13 16:21:10 -04:00
2026-08-20 23:33:26 -04:00
2026-08-20 23:33:26 -04:00
2026-07-21 15:21:57 -04:00
2026-08-02 04:54:31 +00:00
2026-07-31 14:43:40 +00:00
2026-08-20 23:33:26 -04:00
2026-08-19 23:17:24 -04:00
2026-08-17 16:34:46 -04:00
2026-08-20 23:33:26 -04:00
2026-08-20 23:33:26 -04:00
2026-07-08 16:47:34 -04:00
2026-05-16 10:15:59 -04:00
2026-07-30 20:15:00 +00:00
2026-05-30 19:57:45 -04:00
2026-05-27 13:21:57 -04:00
2026-07-21 09:43:05 -04:00
2026-08-17 03:42:08 -04:00
2026-08-19 23:17:24 -04:00
2026-07-13 22:46:55 -04:00
2026-08-21 20:43:20 -04:00
2026-05-21 16:59:57 -04:00
2026-05-21 16:59:57 -04:00
2026-05-02 22:56:10 -04:00
2026-05-02 22:56:10 -04:00
2026-08-16 12:33:12 -04:00
2026-06-24 22:45:32 -04:00
2026-08-16 12:33:12 -04:00
2026-05-05 08:52:05 -04:00
2026-05-05 08:52:05 -04:00
2026-07-04 14:39:33 -04:00
2026-07-04 14:39:33 -04:00
2026-05-18 00:43:46 -04:00
2026-05-18 00:43:46 -04:00
2026-05-02 13:33:53 -04:00
2026-07-04 11:33:18 -04:00
2026-08-16 18:25:23 -04:00
2026-08-16 18:25:23 -04:00
2026-05-21 13:08:02 -04:00
2026-07-08 15:28:21 -04:00
2026-08-20 13:26:05 -04:00
2026-08-18 10:44:50 -04:00
2026-08-18 10:44:50 -04:00
2026-08-21 20:43:20 -04:00
2026-08-21 20:43:20 -04:00
2026-08-21 20:43:20 -04:00
2026-08-21 20:43:20 -04:00
2026-08-21 20:43:20 -04:00
2026-04-28 12:26:39 -04:00
2026-07-03 15:31:17 -04:00
2026-07-30 12:20:38 +00:00
2026-05-29 08:24:05 -04:00
2026-05-29 17:47:25 -04:00
2026-04-28 12:26:39 -04:00
2026-07-14 20:37:03 -04:00
2026-08-17 01:59:02 -04:00
2026-08-21 20:43:20 -04:00
2026-08-18 12:26:00 -04:00
2026-08-18 12:26:00 -04:00
2026-08-18 12:26:00 -04:00
2026-07-10 23:48:59 -04:00
2026-07-13 22:46:55 -04:00
2026-08-18 12:26:00 -04:00
2026-05-02 21:31:48 -04:00
2026-06-27 21:42:52 -05:00
2026-08-02 01:50:34 +00:00
2026-04-29 17:44:12 -04:00
2026-08-02 01:50:34 +00:00
2026-05-29 23:43:02 -04:00
2026-06-01 21:25:42 -04:00
2026-08-17 12:58:09 -04:00
2026-08-17 12:58:09 -04:00
2026-07-14 23:24:55 -04:00
2026-07-13 22:46:55 -04:00
2026-04-21 22:53:27 -04:00
2026-04-28 12:26:39 -04:00
2026-07-04 03:32:48 -04:00
2026-04-28 12:26:39 -04:00
2026-05-16 10:15:59 -04:00
2026-07-13 22:46:55 -04:00
2026-07-13 22:46:55 -04:00
2026-08-12 15:50:41 -04:00
2026-08-14 17:16:10 -04:00
2026-08-17 01:59:02 -04:00
2026-08-22 01:31:33 +00:00
2026-08-21 20:43:20 -04:00
2026-08-17 01:59:02 -04:00
2026-08-12 15:50:41 -04:00
2026-08-12 15:50:41 -04:00
2026-07-14 23:24:55 -04:00
2026-07-26 23:56:34 +00:00
2026-08-20 23:33:26 -04:00
2026-06-24 22:28:34 -04:00
2026-05-02 18:36:55 -04:00
2026-05-25 11:46:41 -04:00
2026-07-06 10:07:34 -04:00
2026-08-22 01:21:50 +00:00
2026-07-07 16:51:48 -04:00
2026-07-30 12:20:38 +00:00
2026-07-30 12:20:38 +00:00
2026-07-03 10:15:49 -04:00
2026-07-03 12:17:03 -04:00
2026-05-27 10:09:30 -04:00
2026-05-07 20:01:34 -04:00
2026-08-15 19:18:55 -04:00
2026-07-04 11:33:18 -04:00
2026-07-04 11:33:18 -04:00
2026-05-06 08:40:11 -04:00
2026-05-06 08:40:11 -04:00
2026-05-14 15:45:51 -04:00
2026-05-03 17:40:18 -04:00
2026-05-18 00:03:20 -04:00
2026-05-18 00:03:20 -04:00
2026-05-03 17:40:18 -04:00
2026-05-03 17:40:18 -04:00
2026-05-03 17:40:18 -04:00
2026-04-28 12:26:39 -04:00
2026-04-28 12:26:39 -04:00
2026-07-11 14:30:32 -04:00
2026-07-10 23:48:59 -04:00
2026-04-25 11:35:19 -04:00
2026-04-21 19:33:47 -04:00
2026-04-25 11:35:19 -04:00
2026-04-21 23:59:54 -04:00
2026-04-28 12:26:39 -04:00
2026-07-10 23:32:22 -04:00
2026-07-04 02:06:58 -04:00
2026-07-04 02:06:58 -04:00
2026-05-09 18:19:33 -04:00
2026-07-08 11:58:41 -04:00
2026-08-17 09:03:44 -04:00
2026-08-17 14:26:09 -04:00
2026-08-20 23:33:26 -04:00
2026-08-20 23:33:26 -04:00
2026-04-22 12:21:34 -04:00
2026-04-22 12:21:34 -04:00
2026-08-21 20:43:20 -04:00
2026-08-15 08:22:09 -04:00
2026-08-22 01:23:59 +00:00
2026-08-22 01:21:50 +00:00
2026-07-08 11:49:01 -04:00
2026-08-22 01:31:33 +00:00
2026-08-17 01:59:02 -04:00
2026-08-17 01:59:02 -04:00
2026-08-22 01:41:31 +00:00
2026-08-22 01:41:31 +00:00
2026-08-22 01:55:59 +00:00
2026-08-22 01:21:50 +00:00
2026-08-21 20:43:20 -04:00
2026-08-21 20:43:20 -04:00
2026-08-22 01:55:59 +00:00
2026-08-21 20:43:20 -04:00
2026-08-21 20:43:20 -04:00
2026-08-17 05:19:25 -04:00
2026-08-22 01:31:33 +00:00
2026-08-22 01:31:33 +00:00
2026-04-29 14:35:49 -04:00
2026-04-29 14:35:49 -04:00
2026-07-08 11:58:41 -04:00
2026-07-08 11:58:41 -04:00
2026-05-02 13:33:53 -04:00
2026-07-14 20:37:03 -04:00
2026-07-14 20:37:03 -04:00
2026-04-08 20:30:39 +00:00
2026-04-10 23:12:59 +00:00
2026-07-05 22:23:12 -04:00
2026-07-08 11:58:41 -04:00