Naiyuan Qing
28edfb5026
fix(issues): emit project_changed so moved issues leave the old project list (MUL-3669)
...
The per-project issue list rides the filtered myAll cache. Changing an
issue's project is a membership change, but the surgical patch
(patchIssueInBuckets) is filter-blind and never removes a card that no
longer matches the list's project filter — so a moved issue stayed visible
in the old project's list until a manual refetch (#4548 / MUL-3669).
Root cause: project_id was the only membership-affecting field with no
server *_changed flag. The WS handler fell back to diffing project_id
against its own cache, which breaks once onMutate has optimistically
overwritten the cached value on a local move.
- server: stamp project_changed on issue:updated (UpdateIssue + Batch),
alongside status_changed / assignee_changed.
- events.ts: surface project_changed (optional, additive — old clients ignore).
- ws-updaters: prefer the server flag, fall back to the cache diff only when
absent (older backend) so a new frontend on an old backend does not regress.
- mutations: onSettled invalidates myAll when project_id changed — a local
safety net that never depends on the WS echo (update + batch).
Tests: WS flag wins over a matching cache (local-move repro), explicit false
suppresses the legacy diff, the cache-diff fallback still fires, and both
mutations invalidate myAll on a project change.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-25 16:38:52 +08:00
..
2026-05-09 16:11:58 +08:00
2026-06-17 15:18:44 +02:00
2026-05-28 16:05:19 +08:00
2026-05-28 16:05:19 +08:00
2026-06-15 15:12:45 +08:00
2026-06-03 19:12:14 +08:00
2026-05-28 19:06:57 +08:00
2026-06-13 15:33:28 +08:00
2026-06-03 16:39:06 +08:00
2026-05-28 19:06:57 +08:00
2026-06-17 08:23:20 +02:00
2026-05-28 15:53:16 +08:00
2026-06-24 16:25:17 +08:00
2026-04-21 14:42:52 +08:00
2026-06-03 16:39:06 +08:00
2026-06-15 14:12:24 +08:00
2026-06-02 15:47:57 +08:00
2026-06-18 13:33:14 +08:00
2026-05-27 15:47:36 +08:00
2026-05-18 12:17:39 +08:00
2026-05-27 15:47:36 +08:00
2026-06-03 16:39:06 +08:00
2026-06-18 13:33:14 +08:00
2026-06-18 09:40:38 +08:00
2026-06-24 12:46:20 +08:00
2026-06-24 14:16:22 +08:00
2026-05-28 16:05:19 +08:00
2026-05-28 16:05:19 +08:00
2026-05-27 14:52:03 +08:00
2026-05-27 14:52:03 +08:00
2026-06-24 09:52:18 +08:00
2026-06-01 08:28:15 +08:00
2026-06-10 14:20:39 +08:00
2026-06-16 08:20:15 +08:00
2026-06-24 09:52:18 +08:00
2026-06-16 08:38:53 +08:00
2026-06-15 13:54:36 +08:00
2026-05-22 13:22:36 +08:00
2026-06-03 16:39:06 +08:00
2026-06-04 13:12:32 +08:00
2026-06-24 16:19:30 +08:00
2026-06-24 16:25:17 +08:00
2026-06-17 16:00:22 +08:00
2026-06-24 16:25:17 +08:00
2026-05-21 15:33:47 +08:00
2026-06-18 11:10:06 +08:00
2026-04-23 10:35:55 +08:00
2026-06-03 16:39:06 +08:00
2026-06-25 16:01:09 +08:00
2026-06-25 16:01:09 +08:00
2026-06-22 23:44:46 +08:00
2026-06-22 23:44:46 +08:00
2026-06-16 16:28:38 +08:00
2026-06-21 23:41:05 +08:00
2026-06-25 16:01:09 +08:00
2026-05-07 15:50:27 +08:00
2026-05-07 15:50:27 +08:00
2026-05-06 14:31:33 +08:00
2026-04-28 14:50:28 +08:00
2026-05-04 21:24:56 +08:00
2026-06-03 16:39:06 +08:00
2026-06-23 00:14:42 +08:00
2026-06-23 00:14:42 +08:00
2026-06-22 13:56:48 +08:00
2026-06-23 00:14:42 +08:00
2026-06-24 16:06:14 +08:00
2026-05-28 14:20:20 +08:00
2026-05-15 18:44:08 +08:00
2026-05-19 10:37:38 +08:00
2026-06-02 17:17:41 +08:00
2026-05-21 16:35:45 +08:00
2026-05-21 16:35:45 +08:00
2026-05-19 17:04:16 +08:00
2026-06-23 13:17:13 +08:00
2026-06-23 13:17:13 +08:00
2026-06-16 12:26:44 +08:00
2026-06-25 16:38:52 +08:00
2026-06-25 00:19:13 +08:00
2026-06-25 00:19:13 +08:00
2026-06-24 12:46:20 +08:00
2026-06-24 12:46:20 +08:00
2026-06-15 15:12:45 +08:00
2026-05-06 11:01:22 +02:00
2026-06-03 16:39:06 +08:00
2026-05-21 19:00:26 +08:00
2026-06-03 16:39:06 +08:00
2026-05-21 15:33:47 +08:00
2026-05-27 22:22:26 +08:00
2026-05-27 22:22:26 +08:00
2026-04-28 14:50:28 +08:00
2026-06-24 16:25:17 +08:00
2026-06-24 16:25:17 +08:00
2026-06-21 23:54:58 +08:00
2026-06-21 23:54:58 +08:00
2026-06-12 16:45:38 +08:00
2026-04-28 14:50:28 +08:00
2026-05-25 10:05:17 +08:00
2026-06-08 13:08:38 +08:00
2026-06-23 16:52:46 +08:00
2026-05-06 14:31:33 +08:00
2026-05-06 14:31:33 +08:00
2026-06-11 13:00:56 +08:00
2026-06-22 13:14:22 +08:00
2026-06-11 13:00:56 +08:00
2026-06-11 13:00:56 +08:00
2026-06-18 15:24:41 +08:00
2026-05-03 11:13:34 +08:00
2026-05-03 11:13:34 +08:00
2026-05-03 11:13:34 +08:00
2026-05-20 12:30:10 +08:00
2026-06-23 14:20:18 +08:00
2026-06-23 14:20:18 +08:00
2026-06-18 11:10:06 +08:00
2026-05-06 13:00:11 +08:00
2026-05-06 13:00:11 +08:00
2026-05-06 13:00:11 +08:00
2026-05-06 13:00:11 +08:00
2026-05-21 15:33:47 +08:00
2026-06-23 16:52:46 +08:00
2026-05-18 15:45:06 +08:00
2026-06-11 13:00:56 +08:00
2026-06-11 13:00:56 +08:00
2026-05-22 12:22:07 +08:00
2026-06-01 15:19:42 +08:00
2026-06-22 13:34:06 +08:00
2026-06-22 13:34:06 +08:00
2026-05-13 18:46:20 +08:00
2026-06-22 13:14:22 +08:00
2026-06-22 13:14:22 +08:00
2026-06-15 15:12:45 +08:00
2026-06-02 13:03:15 +08:00
2026-05-14 14:07:26 +08:00
2026-06-02 15:47:57 +08:00
2026-06-23 13:17:13 +08:00
2026-05-11 12:39:45 +08:00
2026-05-28 15:53:16 +08:00
2026-06-10 16:27:07 +08:00
2026-06-02 14:29:29 +08:00
2026-05-21 15:33:47 +08:00
2026-05-18 14:59:40 +08:00
2026-05-18 14:59:40 +08:00
2026-05-18 12:17:39 +08:00
2026-06-25 01:29:20 +08:00
2026-05-08 19:14:12 +08:00
2026-06-24 12:46:20 +08:00
2026-06-24 12:46:20 +08:00
2026-06-13 01:22:45 +08:00