Operation system: MacOS Tahoe 26.5.1
Web Browser: Safari & Chrome
Bug report
I have recently been using Bear Web extensively to keep my personal Apple ID separate from my company Apple ID. While doing heavy editing in Bear Web, I noticed that sync occasionally fails.
Sync works normally until the first failure occurs. After that, it never succeeds again unless I refresh the web page. However, refreshing the page causes me to lose any subsequent edits that failed to sync.
I tried several scenarios to identify what triggers the sync failure, but I have not been able to pinpoint the exact steps. However, I do have some observations:
- This does not appear to be a browser compatibility issue, as it happens in both Chrome and Safari.
- At some point, the
modifyAPI call receives aBAD_REQUESTresponse, and all subsequentmodifycalls continue to receiveBAD_REQUEST.- The
reasonfield in the response body is:"missing required field 'recordChangeTag'".
- The
- The issue seems to happen when the edit includes a deletion operation.
- Not every deletion causes the issue, but every occurrence of this issue seems to involve a deletion.
It usually occurs when I make many edits between modify calls, especially when those edits include deletions. I inspected the requests and found that the failing modify call contains a delete operation whose recordChangeTag is null.
For example, the last successful request has the following structure:
{
"operations": [
{
"operationType": "delete",
"record": {
// truncated
"recordChangeTag": "1vfj",
// truncated
}
},
{
"operationType": "update",
"record": {
// truncated
"recordChangeTag": "1vfi",
// truncated
},
"recordType": "SFNote"
},
{
"operationType": "create",
"record": {
// truncated
"recordChangeTag": null,
// truncated
},
"recordType": "SFNoteBackLink"
}
],
// truncated
}
The subsequent failing requests have the following structure:
{
"operations": [
{
"operationType": "delete",
"record": {
// truncated
"recordChangeTag": null,
// truncated
}
},
{
"operationType": "update",
"record": {
// truncated
"recordChangeTag": "1vfo",
// truncated
},
"recordType": "SFNote"
},
{
"operationType": "create",
"record": {
// truncated
"recordChangeTag": null,
// truncated
},
"recordType": "SFNoteBackLink"
}
],
// truncated
}
Here is another failed request containing multiple delete operations, one of which has a null recordChangeTag:
{
"operations": [
{
"operationType": "delete",
"record": {
// truncated
"recordChangeTag": "1vgb",
// truncated
}
},
{
"operationType": "delete",
"record": {
// truncated
"recordChangeTag": "1vg9",
// truncated
}
},
{
"operationType": "delete",
"record": {
// truncated
"recordChangeTag": null,
// truncated
}
},
{
"operationType": "update",
"record": {
// truncated
"recordChangeTag": "1vgd",
// truncated
},
"recordType": "SFNote"
},
{
"operationType": "create",
"record": {
// truncated
"recordChangeTag": null,
// truncated
},
"recordType": "SFNoteBackLink"
}
],
// truncated
}