You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(spec)!: retire BatchOptions.validateOnly — a dry-run flag never implemented (#4052) (#4057)
`BatchOptions.validateOnly` promised a dry-run ("validate records without persisting changes") but no batch surface ever read it — updateManyData / deleteManyData / batchData all persist regardless, so a caller sending it to PREVIEW a mutation got it executed: a declared flag lying about a data-safety guarantee (PD #10). Retired rather than half-implemented — a real no-commit batch has its own design space and should be reintroduced deliberately.
- Tombstone validateOnly with retiredKey() in BatchOptionsSchema (ADR-0104); type key becomes never.
- HTTP-only, so recorded as a semantic migration on protocol-18 step (batch-options-validate-only-retired), not a stack conversion.
- Fix a dangling doc reference: /createMany route's requestSchema 'CreateManyRequestSchema' (never exported) → real CreateManyDataRequestSchema.
- Drop the retired key from hand-written batch examples + the client-sdk Batch Options table; regenerated references; major changeset.
Closes#4052.
@@ -89,7 +89,7 @@ const result = BatchConfig.parse(data);
89
89
|**atomic**|`boolean`| ✅ | If true, rollback entire batch on any failure (transaction mode) |
90
90
|**returnRecords**|`boolean`| ✅ | If true, return full record data in response |
91
91
|**continueOnError**|`boolean`| ✅ | If true (and atomic=false), continue processing remaining records after errors |
92
-
|**validateOnly**|`boolean`|✅|If true, validate records without persisting changes (dry-run mode)|
92
+
|**validateOnly**|`any`|optional|[REMOVED]`options.validateOnly` was removed from BatchOptions in @objectstack/spec (#4052). It was never implemented: the batch surfaces persisted regardless, so a "dry-run" would have silently executed. There is no dry-run today — drop the key. If you need to preview a batch without writing, open an issue so it can be designed (no-commit cascade / constraint semantics) and reintroduced as a flag that actually holds.|
93
93
94
94
95
95
---
@@ -115,7 +115,7 @@ const result = BatchConfig.parse(data);
115
115
| :--- | :--- | :--- | :--- |
116
116
|**operation**|`Enum<'create' \| 'update' \| 'upsert' \| 'delete'>`| ✅ | Type of batch operation |
117
117
|**records**|`{ id?: string; data?: Record<string, any>; externalId?: string }[]`| ✅ | Array of records to process (server caps the count — see batch.maxBatchSize) |
0 commit comments