efiten and Claude Opus 5
71b892ba95
fix( #1899 ): scope the channel preview to the region filter ( #1961 )
...
Closes #1899 .
The Channels sidebar preview (`lastMessage` / `lastSender`) ignored the
active region filter, so an operator filtering on their own region saw a
preview line from a message their observers never heard.
## Cause
`GetChannels` scoped `msg_count` and `last_activity` correctly: the
outer query joins `observations` and `observers` and filters on IATA.
The `sample_json` subquery that feeds the preview joined neither, so it
always returned the globally newest message on the channel.
## Fix
Both region-filtered branches now scope the subquery the way the outer
query does: v3 through `observations`/`observers` on `observer_idx`, v2
through the `EXISTS` on `observer_id`. The unfiltered branch is
untouched, since there is no filter for it to respect.
**One thing that is easy to get wrong here:** the subquery sits in the
SELECT list, *ahead of* the WHERE, so its placeholders bind first. The
region codes are appended twice, subquery set first, or every filtered
call binds the wrong values.
**Scope checked rather than assumed:** `GetEncryptedChannels` has the
same shape and the same `regionPlaceholder` pattern, but selects no
`sample_json`, so it does not have this bug and is left alone.
## Verification
The regression test **fails on unmodified master**, with the reported
symptom:
```
db_test.go:2465: preview sender = Bob, want Alice: SJC must not be shown Bob's
message, which only SFO heard
db_test.go:2469: preview message = heard in SFO, want "heard in SJC"
```
It asserts both directions, so it cannot pass by always picking the
oldest row, and it asserts the unfiltered call still shows the globally
newest message, which was never in question.
`gofmt` clean, `go vet` clean, `cmd/server` suite ok in 98.5s.
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-09-04 17:04:54 +02:00
..
2026-04-21 09:09:39 -07:00
2026-04-03 13:51:13 -07:00
2026-07-08 22:14:41 -07:00
2026-07-08 22:14:41 -07:00
2026-05-21 14:00:15 -07:00
2026-09-03 18:52:03 +02:00
2026-06-12 21:02:59 +00:00
2026-09-03 18:52:03 +02:00
2026-09-04 16:02:59 +02:00
2026-09-03 18:52:03 +02:00
2026-05-03 17:56:42 -07:00
2026-05-03 17:56:42 -07:00
2026-07-03 02:21:08 -07:00
2026-05-18 22:51:23 -07:00
2026-05-18 22:51:23 -07:00
2026-05-18 22:51:23 -07:00
2026-06-27 22:03:05 -07:00
2026-06-04 03:21:26 -07:00
2026-09-03 18:52:03 +02:00
2026-06-04 13:14:09 +00:00
2026-09-03 18:52:03 +02:00
2026-09-03 18:52:03 +02:00
2026-04-20 21:46:34 -07:00
2026-09-03 18:52:03 +02:00
2026-05-25 22:16:14 -07:00
2026-06-07 03:43:29 -07:00
2026-06-07 03:43:29 -07:00
2026-06-07 03:43:29 -07:00
2026-09-03 18:52:03 +02:00
2026-09-02 18:34:59 +02:00
2026-06-03 13:58:04 -07:00
2026-06-06 22:45:05 -07:00
2026-09-02 09:50:18 +02:00
2026-09-03 18:52:03 +02:00
2026-09-02 09:50:18 +02:00
2026-05-18 12:27:44 -07:00
2026-09-03 18:52:03 +02:00
2026-09-03 18:52:03 +02:00
2026-05-21 14:00:15 -07:00
2026-05-21 11:39:49 -07:00
2026-05-21 11:39:49 -07:00
2026-05-21 11:39:49 -07:00
2026-09-03 18:52:03 +02:00
2026-06-06 22:45:05 -07:00
2026-09-02 09:50:09 +02:00
2026-05-30 13:22:41 -07:00
2026-05-30 13:22:41 -07:00
2026-05-30 13:22:41 -07:00
2026-06-19 11:37:16 -07:00
2026-06-27 22:03:05 -07:00
2026-06-27 22:03:05 -07:00
2026-09-03 18:52:03 +02:00
2026-06-04 14:41:00 -07:00
2026-09-02 13:10:43 +00:00
2026-09-04 17:04:54 +02:00
2026-09-04 17:04:54 +02:00
2026-06-12 19:10:44 -07:00
2026-05-15 22:34:21 -07:00
2026-09-03 18:52:03 +02:00
2026-09-03 18:52:03 +02:00
2026-05-05 01:16:57 -07:00
2026-09-03 18:52:03 +02:00
2026-06-29 15:53:59 -07:00
2026-05-21 14:00:15 -07:00
2026-04-16 00:09:36 -07:00
2026-09-03 18:52:03 +02:00
2026-06-04 16:27:48 -07:00
2026-05-05 01:58:52 -07:00
2026-05-19 23:53:41 -07:00
2026-03-31 01:10:56 -07:00
2026-05-31 14:54:21 -07:00
2026-06-22 10:07:49 -07:00
2026-05-29 02:42:21 -07:00
2026-06-27 22:03:05 -07:00
2026-09-04 15:15:16 +02:00
2026-09-04 15:15:16 +02:00
2026-09-03 18:52:03 +02:00
2026-06-07 09:28:51 -07:00
2026-04-03 13:11:59 -07:00
2026-06-19 11:37:16 -07:00
2026-06-19 11:37:16 -07:00
2026-06-11 10:10:12 -07:00
2026-06-11 10:10:12 -07:00
2026-05-15 16:21:14 +00:00
2026-05-16 19:55:00 +00:00
2026-09-03 18:52:03 +02:00
2026-05-15 20:24:55 -07:00
2026-05-15 22:46:25 -07:00
2026-06-12 12:47:53 -07:00
2026-09-03 18:52:03 +02:00
2026-09-03 18:52:03 +02:00
2026-04-20 22:15:02 -07:00
2026-05-21 14:00:15 -07:00
2026-04-21 04:51:24 +00:00
2026-05-02 20:35:15 -07:00
2026-05-17 16:13:11 +00:00
2026-05-19 08:08:28 -07:00
2026-05-18 23:19:27 -07:00
2026-06-30 17:19:56 -07:00
2026-06-25 05:05:46 -07:00
2026-06-30 17:19:56 -07:00
2026-06-11 07:38:36 -07:00
2026-09-03 18:52:03 +02:00
2026-06-11 07:38:36 -07:00
2026-06-06 22:44:59 -07:00
2026-06-11 11:36:49 -07:00
2026-06-11 11:36:49 -07:00
2026-06-11 11:36:49 -07:00
2026-06-04 14:41:22 -07:00
2026-09-03 18:52:03 +02:00
2026-09-03 18:52:03 +02:00
2026-05-28 15:06:30 -07:00
2026-09-03 18:52:03 +02:00
2026-09-02 10:27:48 +02:00
2026-06-30 15:16:31 -07:00
2026-06-12 08:11:02 -07:00
2026-09-02 10:27:48 +02:00
2026-09-03 18:52:03 +02:00
2026-05-03 08:56:09 -07:00
2026-05-21 14:00:15 -07:00
2026-09-03 18:52:03 +02:00
2026-09-03 18:52:03 +02:00
2026-04-02 23:45:03 -07:00
2026-09-03 18:52:03 +02:00
2026-09-03 18:52:03 +02:00
2026-05-29 02:42:21 -07:00
2026-05-29 02:42:21 -07:00
2026-05-29 02:42:21 -07:00
2026-05-29 02:42:21 -07:00
2026-05-16 10:14:44 -07:00
2026-09-02 11:07:18 +02:00
2026-09-03 18:52:03 +02:00
2026-06-12 11:38:43 -07:00
2026-09-02 23:20:39 +02:00
2026-05-19 23:53:41 -07:00
2026-05-19 23:53:41 -07:00
2026-05-05 01:41:00 -07:00
2026-05-05 01:41:00 -07:00
2026-09-03 18:52:03 +02:00
2026-06-08 01:27:13 -07:00
2026-06-09 00:27:56 -07:00
2026-06-09 03:23:48 -07:00
2026-06-09 03:23:48 -07:00
2026-06-09 00:27:56 -07:00
2026-06-11 10:10:12 -07:00
2026-06-19 11:37:16 -07:00
2026-06-19 11:37:16 -07:00
2026-05-18 09:22:27 -07:00
2026-09-03 18:52:03 +02:00
2026-04-03 13:33:26 -07:00
2026-09-03 18:52:03 +02:00
2026-09-02 11:07:08 +02:00
2026-09-03 18:52:03 +02:00
2026-09-02 09:50:26 +02:00
2026-05-29 01:08:12 -07:00
2026-05-29 01:08:12 -07:00
2026-05-29 02:42:21 -07:00
2026-05-29 02:42:21 -07:00
2026-09-03 18:52:03 +02:00
2026-09-03 18:52:03 +02:00
2026-06-19 11:37:16 -07:00
2026-07-07 00:12:44 -07:00
2026-09-03 18:52:03 +02:00
2026-09-04 16:02:59 +02:00
2026-09-02 18:34:59 +02:00
2026-05-17 16:13:11 +00:00
2026-05-25 22:32:00 -07:00
2026-06-04 23:48:47 -07:00
2026-05-15 22:46:28 -07:00
2026-05-15 22:46:28 -07:00
2026-05-15 22:46:28 -07:00
2026-05-15 22:46:28 -07:00
2026-05-15 22:46:28 -07:00
2026-09-02 09:50:09 +02:00
2026-09-03 18:52:03 +02:00
2026-09-02 14:34:20 +02:00
2026-06-29 15:53:59 -07:00
2026-09-03 18:52:03 +02:00
2026-05-28 14:55:59 -07:00
2026-05-25 06:03:10 +00:00
2026-05-02 11:15:25 -07:00
2026-09-03 18:52:03 +02:00
2026-09-03 18:52:03 +02:00
2026-05-08 16:29:23 -07:00
2026-05-08 16:29:23 -07:00
2026-06-07 09:28:51 -07:00
2026-05-05 17:56:56 -07:00
2026-09-03 18:52:03 +02:00
2026-04-01 19:26:11 -07:00
2026-06-06 22:45:05 -07:00
2026-05-15 09:16:39 -07:00
2026-09-02 14:22:30 +02:00
2026-06-27 22:03:05 -07:00
2026-06-27 22:03:05 -07:00
2026-05-03 19:50:01 -07:00
2026-06-22 10:07:49 -07:00
2026-06-22 10:07:49 -07:00
2026-05-21 11:39:43 -07:00
2026-05-20 20:57:02 -07:00
2026-09-03 18:52:03 +02:00
2026-05-28 15:01:58 -07:00
2026-09-02 18:34:59 +02:00
2026-06-06 20:46:42 -07:00
2026-06-06 20:46:42 -07:00
2026-07-08 15:13:39 -07:00
2026-09-02 18:34:59 +02:00
2026-05-20 20:57:02 -07:00
2026-09-03 18:52:03 +02:00
2026-05-15 16:21:14 +00:00
2026-05-15 09:16:39 -07:00
2026-09-03 18:52:03 +02:00
2026-09-03 18:52:03 +02:00
2026-09-02 10:27:40 +02:00
2026-06-04 15:37:37 -07:00
2026-05-18 07:36:28 -07:00
2026-05-03 17:56:12 -07:00
2026-09-03 18:52:03 +02:00
2026-09-04 16:02:59 +02:00
2026-09-04 16:02:59 +02:00
2026-09-03 18:52:03 +02:00
2026-06-19 11:37:16 -07:00
2026-06-19 11:37:16 -07:00
2026-06-19 11:37:16 -07:00
2026-06-19 11:37:16 -07:00
2026-06-19 11:37:16 -07:00
2026-05-15 16:21:14 +00:00
2026-05-03 17:40:54 -07:00
2026-06-03 13:58:04 -07:00
2026-06-30 18:21:21 -07:00
2026-04-20 23:10:33 -07:00
2026-06-28 13:48:47 -07:00
2026-04-21 09:09:39 -07:00
2026-09-03 18:52:03 +02:00
2026-05-29 02:42:21 -07:00
2026-06-06 21:59:23 -07:00
2026-05-03 17:41:22 -07:00
2026-05-03 17:41:22 -07:00
2026-05-21 14:00:15 -07:00
2026-04-20 19:55:00 -07:00
2026-06-27 22:03:05 -07:00
2026-09-02 18:34:59 +02:00
2026-09-04 16:02:59 +02:00
2026-06-27 22:03:05 -07:00
2026-06-27 22:03:05 -07:00
2026-06-27 22:03:05 -07:00
2026-06-27 22:03:05 -07:00
2026-06-29 05:48:58 -07:00
2026-03-30 03:42:11 +00:00
2026-09-03 18:52:03 +02:00
2026-09-02 14:21:42 +02:00