huwenjiao.hwj and Claude Opus 5
6f61183732
fix(sheet): reject sheet prefixes that are blank after trimming
...
--ranges validated the position of "!" in the raw string and then returned the
trimmed halves, so " !A1:B2" was accepted and produced a set_cell_range /
clear_range operation carrying sheetId: "". Depending on how the server treats
an empty sheetId, the whole batch_update fails, or — worse — the operation lands
on the default worksheet instead of the one the user named, while the command
reports success.
Both halves must now be non-empty *after* trimming. batch-clear grew the same
hole independently (it duplicated the split inline); it now shares
splitSheetPrefixedRange, so the invariant holds by construction rather than by
being repeated correctly in two places.
batch-set-style --batch had the same gap at the JSON level: it only rejected
sheetId == "", so " " passed. It now judges the trimmed value but still sends
the raw one — sheetId may be a worksheet *name*, and names may legitimately
carry leading or trailing spaces, so trimming on the user's behalf would target
a different sheet. The --ranges form cannot express such a name anyway, which is
what --batch is for.
TestBlankSheetIdentifierIsRejectedBeforeAnyRemoteCall covers all three entry
points with calls == 0; TestBatchStyleSheetIDIsSentVerbatimNotTrimmed pins the
no-normalisation half.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-09 18:33:56 +08:00
..
2026-08-06 22:24:27 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 12:08:39 +08:00
2026-08-04 14:24:49 +08:00
2026-07-14 08:11:27 +08:00
2026-08-05 11:24:58 +08:00
2026-07-16 10:58:56 +08:00
2026-08-07 12:01:33 +08:00
2026-08-07 14:42:27 +08:00
2026-07-15 15:19:25 +08:00
2026-07-17 10:23:40 +08:00
2026-08-07 15:09:58 +08:00
2026-08-03 16:18:20 +08:00
2026-08-03 19:32:01 +08:00
2026-08-03 14:47:59 +08:00
2026-08-07 15:09:58 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 23:02:20 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-08-03 20:00:47 +08:00
2026-07-14 08:11:27 +08:00
2026-08-03 12:10:54 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 12:04:31 +08:00
2026-08-02 10:07:19 +08:00
2026-08-05 10:39:56 +08:00
2026-07-29 09:46:00 +08:00
2026-08-05 18:19:16 +08:00
2026-08-06 16:48:27 +08:00
2026-08-03 21:50:17 +08:00
2026-08-07 17:19:36 +08:00
2026-07-23 00:03:58 +08:00
2026-07-29 13:29:53 +08:00
2026-07-23 13:00:05 +08:00
2026-07-23 13:00:05 +08:00
2026-08-05 21:23:12 +08:00
2026-07-29 15:51:04 +08:00
2026-08-06 16:07:50 +08:00
2026-07-10 21:40:36 +08:00
2026-07-29 14:36:41 +08:00
2026-08-06 16:46:39 +08:00
2026-08-06 16:07:50 +08:00
2026-07-29 15:34:59 +08:00
2026-08-07 17:19:36 +08:00
2026-08-03 20:00:47 +08:00
2026-08-02 09:08:17 +08:00
2026-07-16 10:58:56 +08:00
2026-07-28 12:09:57 +08:00
2026-07-07 19:07:03 +08:00
2026-07-13 20:33:56 +08:00
2026-06-11 12:18:25 +08:00
2026-06-11 12:18:25 +08:00
2026-07-15 23:14:16 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 11:41:30 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-06-13 23:34:37 +08:00
2026-06-13 23:34:37 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 17:07:51 +08:00
2026-07-16 10:58:56 +08:00
2026-08-03 20:00:47 +08:00
2026-07-15 15:19:25 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 11:41:30 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 22:31:21 +08:00
2026-07-15 15:19:25 +08:00
2026-06-13 23:25:04 +08:00
2026-08-05 20:23:37 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 23:14:16 +08:00
2026-07-15 12:08:39 +08:00
2026-06-24 10:30:04 +08:00
2026-06-24 10:30:04 +08:00
2026-06-24 10:30:04 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 23:02:20 +08:00
2026-07-16 10:58:56 +08:00
2026-07-12 23:11:08 +08:00
2026-07-12 23:11:08 +08:00
2026-07-12 23:11:08 +08:00
2026-08-03 12:10:54 +08:00
2026-07-15 23:02:20 +08:00
2026-07-15 23:14:16 +08:00
2026-07-15 12:08:39 +08:00
2026-07-06 00:46:47 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 22:31:21 +08:00
2026-07-15 15:19:25 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-07-15 23:02:20 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 11:41:30 +08:00
2026-07-15 12:08:39 +08:00
2026-07-15 12:08:39 +08:00
2026-06-11 12:18:25 +08:00
2026-07-15 22:19:49 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 22:31:21 +08:00
2026-07-15 15:19:25 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 11:41:30 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 22:31:21 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 22:19:49 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 22:19:49 +08:00
2026-07-15 23:14:16 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 23:14:16 +08:00
2026-07-15 12:08:39 +08:00
2026-07-09 21:28:35 +08:00
2026-07-09 21:28:35 +08:00
2026-06-14 10:41:37 +08:00
2026-06-15 17:22:45 +08:00
2026-07-16 10:58:56 +08:00
2026-06-13 21:39:45 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 23:14:16 +08:00
2026-07-15 17:07:51 +08:00
2026-07-16 10:58:56 +08:00
2026-06-24 20:36:26 +08:00
2026-07-15 12:08:39 +08:00
2026-07-15 15:19:25 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 12:38:05 +08:00
2026-08-05 15:39:22 +08:00
2026-08-05 15:39:22 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 11:41:30 +08:00
2026-08-05 01:30:17 +08:00
2026-08-01 19:51:54 +08:00
2026-08-07 20:25:21 +08:00
2026-07-07 19:07:03 +08:00
2026-08-06 19:51:41 +08:00
2026-08-05 12:03:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 16:34:45 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-30 20:32:08 +08:00
2026-07-31 22:15:45 +08:00
2026-07-16 10:58:56 +08:00
2026-06-18 18:34:12 +08:00
2026-06-18 18:34:12 +08:00
2026-07-06 00:46:47 +08:00
2026-07-30 23:03:32 +08:00
2026-08-04 21:38:40 +08:00
2026-08-05 12:03:39 +08:00
2026-08-03 17:24:32 +08:00
2026-08-05 12:50:00 +08:00
2026-08-06 14:52:34 +08:00
2026-07-16 10:58:56 +08:00
2026-07-31 14:13:46 +08:00
2026-08-05 00:18:46 +08:00
2026-07-07 19:07:03 +08:00
2026-07-23 17:43:12 +08:00
2026-07-23 17:43:12 +08:00
2026-07-23 17:43:12 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-23 17:43:12 +08:00
2026-08-05 11:51:35 +08:00
2026-07-23 17:43:12 +08:00
2026-08-06 09:56:58 +08:00
2026-07-29 15:34:59 +08:00
2026-08-03 12:10:54 +08:00
2026-07-07 20:48:39 +08:00
2026-08-05 15:14:27 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-07-07 19:07:03 +08:00
2026-08-07 16:25:19 +08:00
2026-07-31 14:13:46 +08:00
2026-08-05 10:39:56 +08:00
2026-08-05 10:39:56 +08:00
2026-08-05 10:39:56 +08:00
2026-07-31 14:13:46 +08:00
2026-07-31 14:13:46 +08:00
2026-07-29 15:34:59 +08:00
2026-07-13 21:09:27 +08:00
2026-08-05 18:05:54 +08:00
2026-08-05 18:05:54 +08:00
2026-08-05 12:58:47 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-08-05 02:03:51 +08:00
2026-08-05 01:22:45 +08:00
2026-08-05 13:57:27 +08:00
2026-08-07 12:01:33 +08:00
2026-07-16 10:58:56 +08:00
2026-07-29 00:21:26 +08:00
2026-07-31 14:13:46 +08:00
2026-07-16 10:58:56 +08:00
2026-08-07 15:09:58 +08:00
2026-07-22 16:31:10 +08:00
2026-08-03 12:10:54 +08:00
2026-07-07 19:07:03 +08:00
2026-08-03 20:00:47 +08:00
2026-07-14 19:04:05 +08:00
2026-07-16 10:58:56 +08:00
2026-08-07 19:17:25 +08:00
2026-08-07 19:17:25 +08:00
2026-03-28 17:51:22 +08:00
2026-07-15 12:08:39 +08:00
2026-08-03 20:00:47 +08:00
2026-07-31 14:13:46 +08:00
2026-08-06 16:07:50 +08:00
2026-08-04 21:54:02 +08:00
2026-08-02 09:08:17 +08:00
2026-08-03 12:10:54 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-13 22:51:38 +08:00
2026-07-14 00:06:37 +08:00
2026-08-06 15:39:25 +08:00
2026-08-03 20:00:47 +08:00
2026-08-05 13:28:43 +08:00
2026-07-31 14:13:46 +08:00
2026-08-05 10:39:56 +08:00
2026-07-14 08:11:27 +08:00
2026-08-05 12:50:00 +08:00
2026-08-04 17:36:22 +08:00
2026-08-04 20:52:53 +08:00
2026-07-16 10:58:56 +08:00
2026-07-29 11:57:57 +08:00
2026-07-07 19:07:03 +08:00
2026-08-04 20:52:53 +08:00
2026-08-06 15:37:09 +08:00
2026-08-05 17:07:19 +08:00
2026-08-05 11:05:54 +08:00
2026-07-16 10:41:59 +08:00
2026-08-04 11:25:31 +08:00
2026-07-24 09:43:16 +08:00
2026-08-04 11:25:31 +08:00
2026-08-05 11:24:58 +08:00
2026-07-16 10:58:56 +08:00
2026-08-03 20:00:47 +08:00
2026-08-03 12:10:54 +08:00
2026-07-07 19:07:03 +08:00
2026-07-16 10:58:56 +08:00
2026-08-09 18:33:56 +08:00
2026-07-31 14:13:46 +08:00
2026-08-03 12:10:54 +08:00
2026-08-03 12:10:54 +08:00
2026-07-16 10:58:56 +08:00
2026-08-03 12:10:54 +08:00
2026-08-09 17:47:50 +08:00
2026-08-09 17:47:50 +08:00
2026-08-06 11:09:02 +08:00
2026-08-07 20:25:21 +08:00
2026-08-09 15:01:14 +08:00
2026-08-07 21:05:47 +08:00
2026-07-16 10:58:56 +08:00
2026-08-09 17:47:50 +08:00
2026-08-09 17:47:50 +08:00
2026-08-09 17:47:50 +08:00
2026-07-16 10:58:56 +08:00
2026-08-03 12:10:54 +08:00
2026-08-03 12:10:54 +08:00
2026-08-06 11:53:06 +08:00
2026-08-06 11:53:06 +08:00
2026-07-17 15:04:13 +08:00
2026-08-03 12:10:54 +08:00
2026-07-16 10:58:56 +08:00
2026-07-29 15:34:59 +08:00
2026-07-16 10:24:58 +08:00
2026-07-16 10:58:56 +08:00
2026-08-03 12:10:54 +08:00
2026-07-13 21:09:27 +08:00
2026-08-03 12:10:54 +08:00
2026-07-29 15:34:59 +08:00
2026-07-16 10:58:56 +08:00
2026-08-05 15:51:43 +08:00
2026-08-09 18:33:56 +08:00
2026-08-07 20:25:21 +08:00
2026-08-09 17:47:50 +08:00
2026-08-09 18:33:56 +08:00
2026-07-13 21:09:27 +08:00
2026-08-03 12:10:54 +08:00
2026-08-03 12:10:54 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-08-03 12:10:54 +08:00
2026-08-09 17:47:50 +08:00
2026-08-09 17:47:50 +08:00
2026-03-27 17:55:57 +08:00
2026-03-27 17:55:57 +08:00
2026-08-07 20:25:21 +08:00
2026-07-07 19:07:03 +08:00
2026-07-31 14:13:46 +08:00
2026-07-16 10:58:56 +08:00
2026-07-13 22:51:38 +08:00
2026-07-28 12:09:57 +08:00
2026-08-03 12:10:54 +08:00
2026-08-04 14:11:29 +08:00
2026-08-05 15:14:27 +08:00
2026-08-05 12:28:46 +08:00
2026-08-04 16:07:16 +08:00
2026-08-04 16:07:16 +08:00
2026-07-15 15:31:08 +08:00
2026-07-31 14:13:46 +08:00
2026-07-16 10:58:56 +08:00