From 265ab6584fb23513e833ec918e27be177347f602 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 12 Aug 2026 12:36:09 +0000 Subject: [PATCH] fix(spec): correct the mispriced SINGLE_RECORD_WRITE_ONLY pricing comment The doc comment priced a batch exemption using #3757's disproven premise (the console rethrows a hard 405 to the user). #3757's author retracted that twice before the issue was closed not planned: useBulkExecutor -> executeBulkBatch catches any adapter throw and falls back to per-row writes, and the grid's built-in bulk-delete gates on the child verb delete (not on bulk). The real cost of an exemption is a wasted round trip plus N per-row writes, not a hard user-visible error. Comment-prose-only change; no runtime/schema/assertion diff. Fixes #7817 --- .../src/data/api-methods-batch-conformance.test.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/spec/src/data/api-methods-batch-conformance.test.ts b/packages/spec/src/data/api-methods-batch-conformance.test.ts index bd2e982cb0..e0416a369f 100644 --- a/packages/spec/src/data/api-methods-batch-conformance.test.ts +++ b/packages/spec/src/data/api-methods-batch-conformance.test.ts @@ -45,9 +45,15 @@ const WRITE_PRIMITIVES = ['create', 'update', 'delete'] as const; * keyed by object name with the reason. Every other tightened whitelist in the * monorepo either grants `bulk` or grants no write verb at all. * - * Adding an entry is a real decision — batch denial is invisible until a user - * multi-selects rows and `data-objectstack` rethrows the 405 without falling - * back to per-row writes. Write down why the object is worth that. + * Adding an entry is a real decision — but price it correctly per #3757's + * two corrections (that issue's premise was retracted by its own author and + * closed not planned). `data-objectstack` does rethrow the 405, but its only + * caller, `useBulkExecutor` → `executeBulkBatch`, falls back to per-row + * writes on ANY throw; and the grid's built-in bulk-delete entry gates on the + * child verb `delete`, not on `bulk` (gating it on `bulk` would be a + * regression). So an exemption costs a wasted round trip plus N per-row + * writes, not a hard user-visible error. Write down why the object is worth + * that. */ const SINGLE_RECORD_WRITE_ONLY: Record = { // #7802. `update` arrived in #7727/#7769 for exactly one gesture on exactly