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(protocol): surface silently-stripped write fields on the update response (#3431)
PATCH /data returned 200 + record even when the data layer legally stripped
part of the caller's write (static readonly #2948 / readonlyWhen #3042). The
strip is correct semantics but was silent on this surface — the only signal
lived in a server WARN log. This reuses the engine's onFieldsDropped channel
(#3407/#3413) to report it, one surface over.
- spec: UpdateDataResponseSchema gains optional droppedFields (DroppedFieldsEvent[]),
present only when >=1 field dropped; purely additive, success unchanged
- metadata-protocol: updateData threads onFieldsDropped and attaches collected
events to its response envelope, which the REST PATCH handler passes through
createData/POST is not wired: insert is readonly-exempt so produces no events.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HaofCZbsPTHE2oJedvKd77
Copy file name to clipboardExpand all lines: content/docs/references/api/protocol.mdx
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1179,6 +1179,7 @@ const result = AiInsightsRequest.parse(data);
1179
1179
|**object**|`string`| ✅ | Object name |
1180
1180
|**id**|`string`| ✅ | Updated record ID |
1181
1181
|**record**|`Record<string, any>`| ✅ | Updated record |
1182
+
|**droppedFields**|`{ object: string; fields: string[]; reason: Enum<'readonly' \| 'readonly_when'> }[]`| optional | Advisory: caller-supplied fields the data layer legally stripped before persistence — static `readonly` (#2948) or a TRUE `readonlyWhen` predicate (#3042). Present only when ≥1 field was dropped. The update still succeeds (the strip is legitimate semantics), so this is the only signal that part of the write did not land — the strip was previously silent on this surface (#3431). |
0 commit comments