835c5437a9
MUL-6971 fix(issues): stop rejecting description edits against a stale baseline ( #7926 )
...
* fix(issues): stop rejecting description edits against a stale baseline
The description editor autosaves on a 1.5s debounce and sent the base it
had adopted; the server rejected the write whenever that base was not
byte-identical to the stored Markdown. Two ways that fired with no second
writer present:
- The editor normalizes its base (`normalizeMarkdown` = trim) while the
server compares raw bytes, so any description stored with surrounding
whitespace — every CLI/integration write that keeps a trailing newline —
rejected EVERY edit, permanently.
- A save whose own echo arrived while the editor was dirty could not
advance the base (ContentEditor refuses external syncs on a dirty
document), so the next autosave carried a base the server had already
moved past. Entering the conflict state then fed the local draft back in
as the base, wedging the editor for the rest of the session.
The guard also never covered the writers most likely to race a human here:
mobile omits text baselines deliberately, and the CLI/agent path sends no
base at all. It mostly rejected the user's own autosave.
Descriptions are now last-write-wins. `description_base` stays in the
request because it is also the channel-media merge metadata — dropping it
would make media the editor had adopted impossible to delete.
Title and comment baselines are untouched: both save explicitly, send an
un-normalized base, and are not reachable by either failure above.
Co-authored-by: multica-agent <[email protected] >
* test(issues): build the new description-baseline test on the shared fixtures
The test landed on the legacy pattern this package is trying to stop
growing: `insertWorkflowTestIssue` plus a hand-written cleanup, raw SQL to
seed the column under test, and a recorder/status quartet. Rebuild it on
`dbfx.Issue` and `testutil.Call(...).Want(...)`, which own the cleanup and
print the request line and response body on a mismatch.
Behaviour is unchanged — still red against the pre-fix handler with the
reported 409, green after it. The assertions added to the surrounding
legacy test stay in their host's style; the rule covers new tests.
Co-authored-by: multica-agent <[email protected] >
---------
Co-authored-by: J <[email protected] >
Co-authored-by: multica-agent <[email protected] >
2026-09-02 16:39:57 +08:00
..
2026-08-19 14:06:59 +08:00
2026-08-19 14:06:59 +08:00
2026-08-18 03:00:21 +08:00
2026-08-13 15:34:17 +08:00
2026-07-15 03:09:56 +08:00
2026-07-15 03:09:56 +08:00
2026-08-14 18:56:40 +08:00
2026-08-19 16:33:48 +08:00
2026-08-26 15:55:26 +08:00
2026-07-29 15:39:18 +08:00
2026-08-25 18:28:01 +08:00
2026-08-26 19:01:01 +08:00
2026-07-03 14:18:43 +08:00
2026-08-12 16:09:16 +08:00
2026-08-26 19:01:01 +08:00
2026-07-29 14:01:09 +08:00
2026-08-20 13:42:44 +08:00
2026-07-03 14:18:43 +08:00
2026-08-18 03:00:21 +08:00
2026-06-13 15:33:28 +08:00
2026-08-03 12:39:27 +08:00
2026-07-22 15:38:38 +08:00
2026-08-31 17:46:56 +08:00
2026-07-29 14:28:44 +08:00
2026-09-02 15:48:38 +08:00
2026-07-29 12:47:14 +08:00
2026-08-26 16:34:10 +08:00
2026-09-01 12:11:50 +08:00
2026-08-19 16:33:48 +08:00
2026-08-12 15:02:03 +08:00
2026-08-12 15:02:03 +08:00
2026-07-29 18:25:14 +08:00
2026-07-15 03:09:56 +08:00
2026-08-16 15:46:00 +08:00
2026-07-15 03:09:56 +08:00
2026-07-17 16:44:31 +08:00
2026-07-17 16:44:31 +08:00
2026-08-26 01:28:35 +08:00
2026-08-21 14:12:36 +08:00
2026-06-30 12:29:11 +08:00
2026-07-15 03:09:56 +08:00
2026-08-19 15:51:26 +08:00
2026-08-24 18:49:54 +08:00
2026-08-20 16:48:03 +08:00
2026-07-15 03:09:56 +08:00
2026-08-18 03:00:21 +08:00
2026-08-18 03:00:21 +08:00
2026-08-20 13:42:44 +08:00
2026-08-27 14:23:09 +08:00
2026-07-29 15:39:18 +08:00
2026-07-29 15:39:18 +08:00
2026-08-19 03:09:59 +08:00
2026-08-25 18:28:01 +08:00
2026-08-25 18:28:01 +08:00
2026-08-25 18:28:01 +08:00
2026-08-20 01:30:58 +08:00
2026-08-25 18:28:01 +08:00
2026-08-25 18:28:01 +08:00
2026-08-11 13:46:48 +08:00
2026-07-15 00:52:27 +08:00
2026-08-03 12:39:27 +08:00
2026-08-22 11:27:39 +08:00
2026-08-22 11:27:39 +08:00
2026-08-25 18:28:01 +08:00
2026-08-05 15:06:42 +08:00
2026-07-08 21:58:16 +08:00
2026-08-25 18:28:01 +08:00
2026-08-05 15:06:42 +08:00
2026-08-25 18:28:01 +08:00
2026-08-25 18:28:01 +08:00
2026-08-21 13:56:18 +08:00
2026-09-01 12:11:50 +08:00
2026-08-22 11:18:02 +08:00
2026-07-22 16:52:34 +08:00
2026-07-22 16:52:34 +08:00
2026-08-27 14:23:09 +08:00
2026-08-27 14:23:09 +08:00
2026-07-31 14:40:16 +08:00
2026-07-14 19:56:17 +08:00
2026-07-15 03:09:56 +08:00
2026-08-18 03:00:21 +08:00
2026-06-24 09:52:18 +08:00
2026-07-31 14:40:16 +08:00
2026-07-27 14:26:23 +08:00
2026-08-19 03:09:59 +08:00
2026-08-03 13:35:04 +08:00
2026-07-10 16:15:10 +08:00
2026-08-18 03:00:21 +08:00
2026-08-19 16:08:40 +08:00
2026-07-15 03:09:56 +08:00
2026-08-19 16:08:40 +08:00
2026-09-01 12:11:50 +08:00
2026-08-26 19:01:01 +08:00
2026-08-26 19:01:01 +08:00
2026-08-18 03:00:21 +08:00
2026-08-21 14:12:36 +08:00
2026-07-14 11:53:42 +08:00
2026-08-16 04:54:32 +08:00
2026-07-27 15:44:39 +08:00
2026-08-19 12:40:04 +08:00
2026-08-20 01:30:58 +08:00
2026-08-25 18:28:01 +08:00
2026-07-27 13:12:06 +08:00
2026-08-21 17:40:27 +08:00
2026-08-14 19:49:37 +08:00
2026-08-19 16:08:40 +08:00
2026-07-10 13:43:45 +08:00
2026-08-05 15:41:15 +08:00
2026-07-14 11:53:42 +08:00
2026-07-14 11:53:42 +08:00
2026-08-26 15:55:05 +08:00
2026-08-31 14:52:00 +08:00
2026-08-31 15:14:18 +08:00
2026-08-26 16:34:10 +08:00
2026-07-14 11:56:30 +08:00
2026-07-14 11:56:30 +08:00
2026-09-02 16:21:05 +08:00
2026-07-29 13:08:48 +08:00
2026-08-19 03:09:59 +08:00
2026-08-06 20:59:32 +08:00
2026-08-18 15:36:10 +08:00
2026-08-21 14:26:48 +08:00
2026-08-21 14:26:48 +08:00
2026-08-20 18:12:30 +08:00
2026-08-24 19:02:47 +08:00
2026-08-12 11:55:53 +08:00
2026-08-12 11:55:53 +08:00
2026-08-27 16:55:03 +08:00
2026-08-25 12:00:49 +08:00
2026-08-21 15:36:33 +08:00
2026-08-21 15:36:33 +08:00
2026-08-19 03:09:59 +08:00
2026-07-07 14:43:19 +08:00
2026-08-31 15:31:29 +08:00
2026-08-31 16:00:45 +08:00
2026-08-31 16:00:45 +08:00
2026-07-13 16:42:46 +08:00
2026-07-03 16:10:19 +08:00
2026-08-26 12:42:42 +08:00
2026-08-26 12:42:42 +08:00
2026-08-26 12:42:42 +08:00
2026-08-18 03:00:21 +08:00
2026-07-15 03:09:56 +08:00
2026-07-02 14:11:10 +08:00
2026-08-25 18:44:39 +08:00
2026-08-26 15:55:26 +08:00
2026-07-10 09:11:29 +08:00
2026-07-13 16:15:58 +08:00
2026-08-07 15:35:59 +08:00
2026-08-18 02:38:18 +08:00
2026-08-20 01:30:58 +08:00
2026-08-20 13:42:44 +08:00
2026-07-22 22:43:34 +08:00
2026-08-19 14:06:59 +08:00
2026-07-16 13:31:06 +08:00
2026-07-13 13:08:04 +08:00
2026-08-19 16:08:40 +08:00
2026-08-27 14:23:09 +08:00
2026-08-19 14:06:59 +08:00
2026-07-23 15:58:25 +08:00
2026-08-19 14:06:59 +08:00
2026-08-19 16:08:40 +08:00
2026-08-19 14:06:59 +08:00
2026-07-06 19:11:47 +08:00
2026-09-02 16:39:57 +08:00
2026-07-13 13:08:04 +08:00
2026-08-19 16:08:40 +08:00
2026-08-23 12:36:10 +08:00
2026-08-18 18:52:11 +08:00
2026-08-31 16:00:45 +08:00
2026-08-31 16:00:45 +08:00
2026-09-01 17:21:11 +08:00
2026-07-17 19:21:27 +08:00
2026-08-18 18:52:11 +08:00
2026-08-19 16:08:40 +08:00
2026-09-01 17:21:11 +08:00
2026-08-27 14:23:09 +08:00
2026-08-20 23:53:49 +08:00
2026-07-31 13:04:42 +08:00
2026-08-20 16:03:51 +08:00
2026-08-04 17:53:03 +08:00
2026-08-31 17:46:56 +08:00
2026-08-11 14:43:45 +08:00
2026-06-16 12:26:44 +08:00
2026-08-10 11:55:05 +08:00
2026-08-10 11:55:05 +08:00
2026-08-18 03:00:21 +08:00
2026-08-10 11:55:05 +08:00
2026-09-02 16:39:57 +08:00
2026-07-31 14:41:05 +08:00
2026-08-19 14:06:59 +08:00
2026-07-08 16:19:41 +08:00
2026-07-08 16:19:41 +08:00
2026-07-03 14:18:43 +08:00
2026-08-03 17:43:03 +08:00
2026-07-15 03:09:56 +08:00
2026-08-06 14:21:02 +08:00
2026-08-31 17:46:56 +08:00
2026-08-07 18:48:07 +08:00
2026-08-07 18:48:07 +08:00
2026-08-07 18:48:07 +08:00
2026-08-07 18:48:07 +08:00
2026-08-07 18:48:07 +08:00
2026-08-25 18:28:01 +08:00
2026-08-06 14:17:19 +08:00
2026-08-06 14:17:19 +08:00
2026-08-27 14:23:09 +08:00
2026-07-23 01:57:44 +08:00
2026-08-06 14:21:02 +08:00
2026-08-10 11:55:05 +08:00
2026-08-23 22:47:37 +08:00
2026-08-27 14:23:09 +08:00
2026-08-20 02:35:29 +08:00
2026-08-23 22:47:37 +08:00
2026-08-23 17:15:46 +08:00
2026-08-23 22:47:37 +08:00
2026-08-23 22:47:37 +08:00
2026-08-21 16:03:44 +08:00
2026-08-20 02:35:29 +08:00
2026-08-21 16:03:44 +08:00
2026-08-23 13:47:06 +08:00
2026-08-23 13:47:06 +08:00
2026-08-21 16:03:44 +08:00
2026-08-23 13:47:06 +08:00
2026-08-23 13:47:06 +08:00
2026-08-23 17:37:21 +08:00
2026-08-23 17:37:21 +08:00
2026-07-13 13:22:02 +08:00
2026-08-31 16:00:45 +08:00
2026-08-18 18:49:01 +08:00
2026-08-22 11:18:02 +08:00
2026-06-21 23:54:58 +08:00
2026-08-31 16:00:45 +08:00
2026-09-02 12:36:52 +08:00
2026-09-02 12:36:52 +08:00
2026-07-30 21:01:48 +08:00
2026-07-30 21:01:48 +08:00
2026-08-20 13:42:44 +08:00
2026-08-27 16:55:03 +08:00
2026-08-19 14:06:59 +08:00
2026-08-06 15:36:02 +08:00
2026-08-11 02:23:11 +08:00
2026-07-02 18:31:45 +08:00
2026-07-08 16:00:17 +08:00
2026-06-11 13:00:56 +08:00
2026-08-19 14:37:08 +08:00
2026-08-19 14:37:08 +08:00
2026-08-31 15:31:29 +08:00
2026-08-31 17:46:56 +08:00
2026-08-31 17:46:56 +08:00
2026-07-30 20:34:01 +08:00
2026-09-02 15:48:38 +08:00
2026-09-02 15:48:38 +08:00
2026-09-02 15:48:38 +08:00
2026-09-02 15:48:38 +08:00
2026-09-02 15:48:38 +08:00
2026-09-02 15:48:38 +08:00
2026-09-02 15:48:38 +08:00
2026-09-02 15:48:38 +08:00
2026-08-28 12:49:08 +08:00
2026-08-28 12:49:08 +08:00
2026-07-02 14:38:05 +08:00
2026-08-03 12:39:27 +08:00
2026-08-28 12:49:08 +08:00
2026-08-28 12:49:08 +08:00
2026-08-03 12:39:27 +08:00
2026-08-20 13:42:44 +08:00
2026-08-26 01:48:44 +08:00
2026-08-03 13:35:04 +08:00
2026-08-19 14:37:08 +08:00
2026-08-19 14:37:08 +08:00
2026-07-16 13:54:01 +08:00
2026-08-31 17:46:56 +08:00
2026-08-26 01:48:44 +08:00
2026-08-31 17:46:56 +08:00
2026-08-07 12:33:47 +08:00
2026-08-31 16:00:45 +08:00
2026-07-06 12:34:51 +08:00
2026-08-22 11:18:59 +08:00
2026-08-25 17:19:46 +08:00
2026-08-26 12:42:42 +08:00
2026-08-26 12:42:42 +08:00
2026-08-25 12:51:44 +08:00
2026-08-13 13:48:18 +08:00
2026-06-30 14:46:46 +08:00
2026-06-30 14:46:46 +08:00
2026-06-11 13:00:56 +08:00
2026-07-22 15:38:38 +08:00
2026-08-26 15:45:06 +08:00
2026-08-13 13:48:18 +08:00
2026-08-13 13:48:18 +08:00
2026-07-22 14:38:31 +08:00
2026-08-26 15:45:06 +08:00
2026-06-29 14:09:34 +08:00
2026-07-09 15:07:11 +08:00
2026-08-25 12:00:49 +08:00
2026-08-27 16:55:03 +08:00
2026-08-25 12:00:49 +08:00
2026-08-31 17:46:56 +08:00
2026-08-06 21:05:21 +08:00
2026-08-24 14:38:07 +08:00
2026-08-24 14:38:07 +08:00
2026-07-15 03:09:56 +08:00
2026-07-08 14:51:54 +08:00
2026-08-24 14:38:07 +08:00
2026-07-03 14:18:43 +08:00
2026-08-07 12:40:12 +08:00
2026-08-24 14:38:07 +08:00
2026-08-20 11:32:17 +08:00
2026-08-19 16:33:48 +08:00
2026-07-15 03:09:56 +08:00
2026-08-24 14:38:07 +08:00
2026-07-31 16:52:17 +08:00
2026-07-31 16:52:17 +08:00
2026-07-31 16:52:17 +08:00
2026-09-01 12:11:50 +08:00
2026-08-21 15:17:02 +08:00
2026-08-20 01:30:58 +08:00
2026-09-02 16:21:05 +08:00
2026-07-14 13:16:50 +08:00
2026-08-05 19:14:33 +08:00
2026-08-19 23:04:26 +08:00
2026-08-19 23:04:26 +08:00
2026-07-31 14:40:16 +08:00
2026-07-16 15:23:56 +08:00
2026-08-20 13:42:44 +08:00
2026-07-24 16:39:22 +08:00
2026-07-24 16:39:22 +08:00
2026-08-17 18:32:02 +08:00
2026-07-24 16:39:22 +08:00
2026-08-19 15:51:26 +08:00
2026-08-19 15:51:26 +08:00
2026-08-20 13:42:44 +08:00
2026-08-17 12:51:39 +08:00
2026-08-17 12:51:39 +08:00
2026-08-08 19:20:38 +08:00
2026-08-08 02:01:43 +08:00
2026-08-08 19:20:38 +08:00
2026-08-12 14:09:48 +08:00
2026-08-11 02:23:11 +08:00
2026-08-25 18:28:01 +08:00
2026-08-12 14:09:48 +08:00
2026-08-14 19:49:37 +08:00
2026-08-14 19:49:37 +08:00
2026-08-14 19:49:37 +08:00
2026-08-14 19:49:37 +08:00
2026-08-14 19:49:37 +08:00
2026-09-01 12:11:50 +08:00
2026-09-01 17:28:48 +08:00
2026-09-01 17:28:48 +08:00
2026-08-20 01:30:58 +08:00