Found while closing #157. dynoxide stores OnDemandThroughput verbatim on every surface, and a capture against real DynamoDB (eu-west-2, 2026-07-24) shows four divergences:
- Partial update should merge.
UpdateTablewith onlyMaxReadRequestUnits=40over stored{20, 15}leaves the write ceiling intact on AWS:{40, 15}. dynoxide replaces the stored object wholesale, dropping the unspecified member. -1should remove a ceiling. AWS echoes-1in the update response, then DescribeTable omits the member. dynoxide has no-1handling.- Both operations should reject ODT on a PROVISIONED table, with subtly different wording per operation. UpdateTable:
One or more parameter values were invalid: MaxReadRequestUnits for OnDemandThroughput cannot be specified when the table BillingMode is PROVISIONED. CreateTable drops the "the" and adds a full stop:... cannot be specified when table BillingMode is PROVISIONED.dynoxide accepts and stores it regardless of billing mode. - Switching billing mode to PROVISIONED should clear stored ceilings. AWS reports no
OnDemandThroughputafter the switch; dynoxide keeps them.
All four are engine-level and affect every surface (HTTP, wasm, MCP, in-process), so they're separate from the MCP parameter work in #154/#156/#157.