{ "name": "rules.upsert \u2014 add one rule and drop another atomically", "description": "Applying adds and removes in one write means a reprioritisation never leaves the table half-valid.", "request": { "jsonrpc": "2.0", "id": 39, "method": "rules.upsert", "params": { "upsert": [ { "ruleId": "big-to-queue", "name": "Queue anything over 1 GiB", "enabled": true, "priority": 5, "match": { "extensions": null, "mimeTypes": null, "hostPattern": null, "urlPattern": null, "minSizeBytes": 1073741824, "maxSizeBytes": null }, "action": { "categoryId": null, "saveDir": null, "queueId": "main", "segments": null, "startMode": "queue", "capture": null } } ], "remove": [ "never-intranet" ] } }, "response": { "jsonrpc": "2.0", "id": 39, "result": { "items": [ { "ruleId": "big-to-queue", "name": "Queue anything over 1 GiB", "enabled": true, "priority": 5, "match": { "extensions": null, "mimeTypes": null, "hostPattern": null, "urlPattern": null, "minSizeBytes": 1073741824, "maxSizeBytes": null }, "action": { "categoryId": null, "saveDir": null, "queueId": "main", "segments": null, "startMode": "queue", "capture": null } }, { "ruleId": "iso-to-programs", "name": "Disk images", "enabled": true, "priority": 10, "match": { "extensions": [ "iso", "img" ], "mimeTypes": null, "hostPattern": null, "urlPattern": null, "minSizeBytes": null, "maxSizeBytes": null }, "action": { "categoryId": "programs", "saveDir": null, "queueId": null, "segments": 8, "startMode": null, "capture": null } } ] } }, "assertions": [ "the whole table comes back in priority order so the caller need not re-list", "adds and removes commit together or not at all" ] }